[英]Logging and email not working for Django for 500
我無法在我的 Django Web 應用程序中進行日志記錄。
我的設置文件如下所示:
EMAIL_HOST = "smtp.gmail.com"
EMAIL_PORT = 465
EMAIL_HOST_USER = "paulhtremblay@gmail.com"
EMAIL_HOST_PASSWORD = "password"
EMAIL_USE_TLS = True
DEFAULT_FROM_EMAIL = "paulhtremblay@gmail.com"
SERVER_EMAIL = 'smtp.gmail.com'
ADMINS = (
('Paul Tremblay', 'paulhtremblay@gmail.com'),
)
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 運行服務器。
這可以更簡單地完成。 如果要同時登錄到電子郵件和 Apache 日志文件,則需要在settings.py
執行以下操作:
配置電子郵件設置 -這確保 Django 可以發送電子郵件
SERVER_EMAIL = 'me@me.eu' EMAIL_HOST = 'smtp.me.eu' EMAIL_PORT = 587 EMAIL_USE_TLS = True EMAIL_HOST_USER = SERVER_EMAIL EMAIL_HOST_PASSWORD = 'password'
將DEBUG
設置為False
-這將啟用錯誤電子郵件發送
DEBUG = False
將錯誤電子郵件接收器添加到ADMINS
(您可能也需要MANAGERS )-這指定誰接收錯誤電子郵件
ADMINS = ( ('Me', 'me@me.eu'), ) MANAGERS = ADMINS
最后,刪除禁用調試模式時不允許消息通過的默認控制台過濾器 -這會使錯誤最終出現在 Apache 錯誤日志中
from django.utils.log import DEFAULT_LOGGING # Assure that errors end up to Apache error logs via console output # when debug mode is disabled DEFAULT_LOGGING['handlers']['console']['filters'] = []
這必須在settings.py
因為在導入設置后將立即使用DEFAULT_LOGGING
配置日志記錄。
如果您想從自己的代碼中添加對日志記錄的支持,請在settings.py
配置根記錄器:
# Enable logging to console from our modules by configuring the root logger
DEFAULT_LOGGING['loggers'][''] = {
'handlers': ['console'],
'level': 'INFO',
'propagate': True
}
最后,您可能希望打開詳細日志記錄:
# Detailed log formatter
DEFAULT_LOGGING['formatters']['detailed'] = {
'format': '{levelname} {asctime} {pathname}:{funcName}:{lineno} {message}',
'style': '{',
}
DEFAULT_LOGGING['handlers']['console']['formatter'] = 'detailed'
然后,您可以按如下方式使用它:
log = logging.getLogger(__name__)
log.info('Logging works!')
這是我的工作設置。 我沒有添加console logger
,因為我只將它用於生產。 靈感來自 Django 文檔的相關 日志示例。
這是我的電子郵件和日志記錄設置:
from os.path import join
# Email Configuration ==========================================================
ADMINS = [('Me', 'my@email'), ]
MANAGERS = ADMINS
DEFAULT_FROM_EMAIL = 'from@email'
SERVER_EMAIL = 'error_from@email'
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。此外,您正嘗試將 Google 用作 SMTP 服務器,但根據此更新后的答案,Google 不再提供此服務,您必須搜索另一台 SMTP 服務器。
還要檢查您的電子郵件客戶端規則,了解電子郵件到達后如何處理。
我的電子郵件客戶端中有一些錯誤規則,它們阻止了我的 Django 日志郵件進入/顯示。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.