簡體   English   中英

日志記錄和電子郵件不適用於 Django 500

[英]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執行以下操作:

  1. 配置電子郵件設置 -這確保 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'
  2. DEBUG設置為False -這將啟用錯誤電子郵件發送

     DEBUG = False
  3. 將錯誤電子郵件接收器添加到ADMINS (您可能也需要MANAGERS )-這指定誰接收錯誤電子郵件

     ADMINS = ( ('Me', 'me@me.eu'), ) MANAGERS = ADMINS
  4. 最后,刪除禁用調試模式時不允許消息通過的默認控制台過濾器 -這會使錯誤最終出現在 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM