django异常日志,使用DEBUG = False,如何将django异常记录到日志文件中

With DEBUG=True, Django exceptions dump to stderr, which is typically sent to a rotating log file by the web server.

With DEBUG=False, Django instead emails the exception to the the ADMINS=.

How can I retain the DEBUG=True behavior with DEBUG=False?

I've read How do you log server errors on django sites and How can I see error logs of Django views and How do you log server errors on django sites. The answer seems to involve some middleware. Is there a code snippet available, or are these batteries included?

解决方案

Here is a full working logging configuration. Critical errors are logged to sentry, warnings are sent to admins by emails, normal notice errors are logged to syslog, and debug messages are prompted on the standard output.

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,

},

}

}

你可能感兴趣的:(django异常日志)