2016-06-30 47 views
4

我不能登錄我的Django的web應用程序的工作。日誌和電子郵件不工作的Django的500

我的設置文件看起來像這樣:

EMAIL_HOST = "smtp.gmail.com" 
EMAIL_PORT = 465 
EMAIL_HOST_USER = "[email protected]" 
EMAIL_HOST_PASSWORD = "password" 
EMAIL_USE_TLS = True 
DEFAULT_FROM_EMAIL = "[email protected]" 
SERVER_EMAIL = 'smtp.gmail.com' 

ADMINS = (
     ('Paul Tremblay', '[email protected]'), 
    ) 

LOGGING = { 
'version': 1, 
'disable_existing_loggers': False, 
'handlers': { 
    'file': { 
     'level': 'ERROR', 
     'class': 'logging.FileHandler', 
     'filename': '/var/log/django_logs/debug.log' 
    }, 
    'mail_admins': { 
    'level': 'ERROR', 
     'class': 'django.utils.log.AdminEmailHandler' 
       }, 
}, 
'loggers': { 
    'django': { 
    'handlers': ['file'], 
    'level': 'ERROR', 
    'propagate': True, 
    }, 
    'django.request': { 
    'handlers': ['file'], 
    'level': 'ERROR', 
    'propagate': True, 
    }, 
}, 
} 

我在我的觀點有此文件:

def five_hundred_test(request): 
    raise ValueError("raising this on purpose for testing for 500") 
    return render(request, 'my_test/basic_css.html') 

當我指出我的瀏覽器這個功能,我得到一個500錯誤(如預期),但沒有任何東西會被髮送到我的電子郵件中,並且沒有任何東西被放入日誌文件。我使用Django 1.9和python3,使用Apache來運行服務器。

+1

如果您粘貼代碼正確地說,在LOGGING = {'之前有太多空間。無論如何,您應該始終從控制檯添加錯誤追蹤。 –

+0

我一定不能粘貼正確。我還看到「LOGGING」之前有太多空間。但是,代碼不會引發任何錯誤(所以我不能包含跟蹤)。它只是沒有做它應該做的。 – user3520634

+0

您在環境變量中出現錯誤:[SERVER_EMAIL](https://docs.djangoproject.com/en/dev/ref/settings/#server-email)收到一個電子郵件地址。我會相應地更新我的答案。 – raratiru

回答

1

這是我的工作設置。我沒有添加console logger,因爲我僅將它用於生產。靈感來自於Django文檔的相關Logging Examples

這裏是我的電子郵件和日誌記錄設置:

from os.path import join 

# Email Configuration ========================================================== 
ADMINS = [('Me', '[email protected]'), ] 
MANAGERS = ADMINS 
DEFAULT_FROM_EMAIL = '[email protected]' 
SERVER_EMAIL = '[email protected]' 
EMAIL_HOST = 'smtp.server' 
EMAIL_HOST_USER = 'username_for_login' 
EMAIL_HOST_PASSWORD = 'password_for_login' 
EMAIL_PORT = 587 
EMAIL_USE_TLS = True 

# Logging Configuration ======================================================== 
LOGGING = { 
    'version': 1, 
    'disable_existing_loggers': False, 
    'formatters': { 
     'verbose': { 
      'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s' 
     }, 
     'simple': { 
      'format': '%(levelname)s %(message)s' 
     }, 
    }, 
    'handlers': { 
     'file': { 
      'level': 'ERROR', 
      'class': 'logging.FileHandler', 
      'filename': join(HOME_DIR, 'my_logs', 'debug.log'), 
      'formatter': 'verbose' 
     }, 
     'mail_admins': { 
      'level': 'ERROR', 
      'class': 'django.utils.log.AdminEmailHandler', 
      'formatter': 'simple' 
     }, 
    }, 
    'loggers': { 
     'django': { 
      'handlers': ['file'], 
      'level': 'ERROR', 
      'propagate': True, 
     }, 
     'django.request': { 
      'handlers': ['mail_admins'], 
      'level': 'ERROR', 
      'propagate': True, 
     }, 
    }, 
} 

我已經發現了兩個錯誤,以您的環境變量:

  • SERVER_EMAIL設置必須是一個電子郵件地址。
  • 您正在使用TLS,因此正確的端口應該是587

此外,您嘗試使用谷歌作爲一個SMTP服務器,但根據本updated answer這個服務不再是可以從谷歌和你必須搜索另一臺SMTP服務器。

我也assembled a post一對夫婦的調試技巧,如果你需要使用。

0

這是可以做到much simpler。如果要登錄到兩個電子郵件和Apache日誌文件,你需要做到以下幾點:

  1. 配置電子郵件設置 - 這保證了Django的可以發送電子郵件

    SERVER_EMAIL = '[email protected]' 
    
    EMAIL_HOST = 'smtp.me.eu' 
    EMAIL_PORT = 587 
    EMAIL_USE_TLS = True 
    EMAIL_HOST_USER = SERVER_EMAIL 
    EMAIL_HOST_PASSWORD = 'password' 
    
  2. 套裝DEBUGFalse - 這使錯誤電子郵件發送

    DEBUG = False 
    
  3. 添加錯誤的電子郵件接收器ADMINS(你可能想MANAGERS,太) - 此指定誰接收了錯誤的電子郵件

    ADMINS = (
        ('Me', '[email protected]'), 
    ) 
    
    MANAGERS = ADMINS 
    
  4. 最後,刪除默認的控制檯過濾器,不讓信息通過 - 這使錯誤最終在Apache的錯誤日誌

    DEFAULT_LOGGING['handlers']['console']['filters'] = []