如果 DEBUG 为 True,也启用 Django 日志记录
Posted
技术标签:
【中文标题】如果 DEBUG 为 True,也启用 Django 日志记录【英文标题】:Enable Django logging also if DEBUG is True 【发布时间】:2012-10-02 05:07:52 【问题描述】:通过阅读官方 django 文档,我对它了解不多。 https://docs.djangoproject.com/en/dev/topics/logging/#configuring-logging
如果 settings.py 中的 DEBUG 设置为 True,我也想启用日志记录。 我希望将错误记录在一个文件中。
怎么做?
这些是我目前拥有的用于日志记录的默认 django 设置:
LOGGING =
'version': 1,
'disable_existing_loggers': False,
'filters':
'require_debug_false':
'()': 'django.utils.log.RequireDebugFalse'
,
'handlers':
'mail_admins':
'level': 'ERROR',
'filters': ['require_debug_false'],
'class': 'django.utils.log.AdminEmailHandler'
,
'loggers':
'django.request':
'handlers': ['mail_admins'],
'level': 'ERROR',
'propagate': True,
,
PS: 我在我的开发环境中使用 Apache + mod_wsgi,因为我使用的是我在 LAN 上远程访问的开发机器,这意味着我没有使用 django 开发服务器并且我看不到控制台日志消息。
【问题讨论】:
【参考方案1】:默认情况下,在任何一种 DEBUG 模式下都不会禁用 Django 日志记录,除非您已将其设置为。
将下面添加到LOGGING
的handlers
部分
'file':
'level':
'INFO',
'class':
'logging.FileHandler',
'formatter':
'verbose',
'filename':
'myapp.log'
它将记录到您项目根目录中的myapp.log
文件。您可以指定完整的路径。
并将格式化程序字段添加到 Logging dict
'formatters':
'verbose':
'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
,
'simple':
'format':
'%(levelname)s %(message)s'
,
,
【讨论】:
【参考方案2】:这是一个受Simple Log to File example for django 1.3+启发的工作设置示例
LOGGING =
'version': 1,
'disable_existing_loggers': False,
'filters':
'require_debug_false':
'()': 'django.utils.log.RequireDebugFalse'
,
'handlers':
'mail_admins':
'level': 'ERROR',
'filters': ['require_debug_false'],
'class': 'django.utils.log.AdminEmailHandler'
,
'logfile':
'level':'DEBUG',
'class':'logging.handlers.RotatingFileHandler',
'filename': SITE_ROOT + "/debug.log",
'maxBytes': 50000,
'backupCount': 2,
'formatter': 'custom',
,
,
'loggers':
#'django':
# 'handlers':['logfile'],
# 'level':'DEBUG',
# 'propagate': True,
#,
#'django.request':
# 'handlers': ['mail_admins', 'logfile'],
# 'level': 'DEBUG',
# 'propagate': True,
#,
'nodeshot.core.mailing':
'handlers': ['logfile'],
'level': 'DEBUG',
,
,
'formatters':
'verbose':
'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
,
'simple':
'format': '%(levelname)s %(message)s'
,
'custom':
'format': '%(levelname)s %(asctime)s\n%(message)s'
,
,
【讨论】:
以上是关于如果 DEBUG 为 True,也启用 Django 日志记录的主要内容,如果未能解决你的问题,请参考以下文章