使用DEBUG = True,Django异常转储到stderr,通常由Web服务器发送到旋转日志文件。
使用DEBUG = False,Django会将异常通过电子邮件发送到ADMINS =。
如何使用DEBUG = False保留DEBUG = True行为?
我看过How do you log server errors on django sites和How can I see error logs of Django views以及How do you log server errors on django sites。答案似乎涉及一些中间件。是否有可用的代码段,或者是否包含这些电池?
答案 0 :(得分:10)
这是一个完整的日志配置。严重错误记录到哨兵,警告通过电子邮件发送给管理员,正常通知错误记录到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,
},
}
}
答案 1 :(得分:10)
Django默认使用日志过滤器来决定是否使用colorAccent
处理程序。另请参阅django.utils.log on Github。
要保持相同的行为而不将消息过滤到控制台,只需在console
中禁用过滤,如下所示:
settings.py
答案 2 :(得分:1)
这是另一种方法,在其他答案之间复杂化,将日志记录到控制台和文件
# 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'),
},
},
}
答案 3 :(得分:0)
这是将异常回溯记录到stderr所需的最小有效Django LOGGING
配置代码段。
将此内容放在settings.py
的末尾:
LOGGING = {
"version": 1,
"disable_existing_loggers": False,
"handlers": {
"console": {
"class": "logging.StreamHandler",
},
},
"loggers": {
"django": {"handlers": ["console"], "level": "INFO"},
},
}