【发布时间】:2016-10-10 13:18:58
【问题描述】:
我在使用 Django 的日志记录系统时遇到了问题。我的目标是将所有类型的日志记录到文件中,并且仅在 DEBUG 设置为 True 时才记录到控制台(现在就是这样)
事实上,日志文件保持空白(尽管它们是由 Django 创建的)。当我启动服务器(使用python3 manage.py runserver)时,我在 shell 中看到以下内容:
Warning!
Error!
... (normal server stuff)
但没有任何内容写入任何日志文件。
如果我在 __init__.py 中取消注释 logging.error('== == START LOGGER == ==') 和 logr.setLevel('DEBUG'),那么 shell 会显示:
ERROR:root:== == START LOGGER == ==
DEBUG:project:Debug!
INFO:project:Info!
WARNING:project:Warning!
ERROR:project:Error!
... (normal server stuff)
而 django.log 显示:
DEBUG (0.000) SET SQL_AUTO_IS_NULL = 0; args=None
DEBUG (0.000) SET SQL_AUTO_IS_NULL = 0; args=None
DEBUG (0.001) SHOW FULL TABLES; args=None
DEBUG (0.000) SELECT `django_migrations`.`app`, `django_migrations`.`name` FROM `django_migrations`; args=()
但所有其他日志保持空白。
这是我的项目应用程序
__init__.py
import logging
#logging.error('== == START LOGGER == ==')
logr = logging.getLogger('project')
#logr.setLevel('DEBUG')
logr.debug('Debug!')
logr.info('Info!')
logr.warning('Warning!')
logr.error('Error!')
这是我的日志设置
settings.py
LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'formatters': {
'verbose': {
'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
},
'simple': {
'format': '%(levelname)s %(message)s'
},
'simpler': {
'format': '%(message)s'
},
},
'filters': {
'require_debug_true': {
'()': 'django.utils.log.RequireDebugTrue',
},
},
'handlers': {
'default':{
'level': 'WARNING',
'class': 'logging.handlers.RotatingFileHandler',
'filename': 'logs/err.log',
'maxBytes': 5242880, # 5MB file size
'encoding': 'utf-8',
'backupCount': 5,
'formatter': 'simple',
},
'debug':{
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler',
'filename': 'logs/debug.log',
'maxBytes': 5242880, # 5MB file size
'encoding': 'utf-8',
'backupCount': 5,
'formatter': 'simple',
},
'django':{
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler',
'filename': 'logs/django.log',
'maxBytes': 5242880, # 5MB file size
'encoding': 'utf-8',
'backupCount': 5,
'formatter': 'simple',
},
'mail':{
'level': 'WARNING',
'class': 'logging.handlers.RotatingFileHandler',
'filename': 'logs/mail.log',
'maxBytes': 5242880, # 5MB file size
'encoding': 'utf-8',
'backupCount': 5,
'formatter': 'simple',
},
'console': {
'level': 'DEBUG',
'filters': ['require_debug_true'],
'class': 'logging.StreamHandler',
'formatter': 'simpler',
},
},
'loggers': {
'django': {
'handlers': ['django'],
'level': 'DEBUG',
'propagate': False,
},
'django.db.backends': {
'handlers': ['django'],
'level': 'DEBUG',
'propagate': False,
},
'django.request': {
'handlers': ['mail'],
'level': 'DEBUG',
'propagate': False,
},
'project': {
'handlers': ['default', 'debug', 'console'],
'level': 'DEBUG',
'propagate': False,
},
},
}
为什么我写logging.error('== == START LOGGER == ==')和logr.setLevel('DEBUG')时会显示DEBUG和INFO??为什么不写入日志文件?我已经搜索了几个小时的类似问题及其答案,但没有成功。谢谢。
编辑:我尝试过的事情:
将'disable_existing_loggers' 更改为False
将'level': 'DEBUG', 更改为'level': 'NOTSET', 和'level': 'ERROR',
删除所有必要的设置
将'propagate' 更改为True
从'handlers' 中删除'console'(这完全没有任何作用)
【问题讨论】:
-
除了一些特定于 Django 的项目之外,
settings.LOGGING['loggers']中的唯一条目是project。除了project,您的任何代码都在模块中吗? -
不,现在它是一个非常基本的 django 应用程序,只有一个模块(称为“项目”)
标签: python django debugging logging console