19

DEBUG=True を指定すると、Django の例外は stderr にダンプされます。これは通常、Web サーバーによってローテーション ログ ファイルに送信されます。

DEBUG=False を指定すると、Django は代わりに ADMINS= に例外をメールで送信します。

DEBUG=False で DEBUG=True の動作を維持するにはどうすればよいですか?

How do you log server errors on django sitesHow can I see error logs of Django viewsHow do you log server errors on django sitesを読みました。答えには、いくつかのミドルウェアが含まれているようです。利用可能なコード スニペットはありますか、それともこれらのバッテリーは含まれていますか?

4

4 に答える 4

20

これは、完全に機能するロギング構成です。重大なエラーはセントリーに記録され、警告は電子メールで管理者に送信され、通常の通知エラーは syslog に記録され、デバッグ メッセージは標準出力に表示されます。

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'filters': {
        'require_debug_false': {
            '()': 'django.utils.log.RequireDebugFalse'
        }
    },
    'formatters': {
        'verbose': {
            'format': '[contactor] %(levelname)s %(asctime)s %(message)s'
        },
    },
    'handlers': {
        # Send all messages to console
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
        },
        # Send info messages to syslog
        'syslog':{
            'level':'INFO',
            'class': 'logging.handlers.SysLogHandler',
            'facility': SysLogHandler.LOG_LOCAL2,
            'address': '/dev/log',
            'formatter': 'verbose',
        },
        # Warning messages are sent to admin emails
        'mail_admins': {
            'level': 'WARNING',
            'filters': ['require_debug_false'],
            'class': 'django.utils.log.AdminEmailHandler',
        },
        # critical errors are logged to sentry
        'sentry': {
            'level': 'ERROR',
            'filters': ['require_debug_false'],
            'class': 'raven.contrib.django.handlers.SentryHandler',
        },
    },
    'loggers': {
        # This is the "catch all" logger
        '': {
            'handlers': ['console', 'syslog', 'mail_admins', 'sentry'],
            'level': 'DEBUG',
            'propagate': False,
        },
    }
}
于 2013-10-10T07:52:52.387 に答える