2013-10-10 4 views
6

DEBUG = Trueの場合、Djangoの例外はstderrにダンプされ、通常はWebサーバーによって回転ログファイルに送られます。DEBUG = Falseの場合、ログファイルにdjangoの例外を記録するにはどうすればいいですか?

DEBUG = Falseの場合、Djangoは代わりにADMINS =にメールを送信します。

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

私は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と読みました。答えにはミドルウェアが含まれているようです。利用可能なコードスニペットはありますか、これらの電池は含まれていますか?

答えて

6

完全な作業ログ設定です。重要なエラーはsentryに記録され、警告は電子メールで管理者に送信され、通常の通知エラーは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, 
     }, 
    } 
} 
+0

どこかにstderr loggerオプションがありますか? – Bryce

+0

[logging.StreamHandlerクラス](http://docs.python.org/2/library/logging.handlers.html#streamhandler)のデフォルト出力はstderrです。 –

+0

したがって、もし私がtrueへの伝播をチェックすると、Apache経由でのDEBUG = Trueの振る舞いを得られますか? – Bryce

3

Djangoはconsoleハンドラがデフォルトで使用するかしない枯れ決定するログフィルタを使用しています。 django.utils.log on Githubも参照してください。

ちょうどこのようなあなたのsettings.pyでフィルタリングを無効にするには、コンソールにメッセージをフィルタリングすることなく、同じ動作を維持するには、次の

from django.utils.log import DEFAULT_LOGGING 

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

短くて甘い、ありがとう! – mrts

0

ここでは、複雑で他の回答との間にハーフ方法でそれを行うための別の方法だとの両方に記録しますコンソールとファイル

# settings.py 
LOGGING = { 
    'version': 1, 
    'disable_existing_loggers': False, 
    'handlers': { 
     'console': { 
      'class': 'logging.StreamHandler', 
     }, 
     'file': { 
      'level': 'DEBUG', 
      'class': 'logging.FileHandler', 
      'filename': 'log.django', 
     }, 
    }, 
    'loggers': { 
     'django': { 
      'handlers': ['console','file'], 
      'level': os.getenv('DJANGO_LOG_LEVEL', 'DEBUG'), 
     }, 
    }, 
} 
関連する問題