我在使用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,
},
},
}
为什么在我写DEBUG
和INFO
时会显示logging.error('== == START LOGGER == ==')
和logr.setLevel('DEBUG')
?为什么不写入日志文件?几个小时我一直在搜索类似的问题及其答案但没有成功。感谢。
编辑:我尝试过的事情:
将'disable_existing_loggers'
更改为False
将'level': 'DEBUG',
更改为'level': 'NOTSET',
和'level': 'ERROR',
删除所有必要设置
将'propagate'
更改为True
从'console'
删除'handlers'
(绝对没有任何内容)
答案 0 :(得分:2)
我没有足够的积分来添加评论,所以我在这里提到如果您的日志记录格式使用%(name)s
,那么上述答案的有用扩展名是,在您拥有的文件中:
logr = logging.getLogger('project')
你可以使用:
logr = logging.getLogger('project.%s' % __name__)
这将意味着您的项目记录器报告完整的App名称,例如。 'project.polls.views'
答案 1 :(得分:1)
在 settings.py
之前调用 __ init __。py 文件将代码从 __ init __。py 移至任何其他文件,该文件将在 settings.py
之后调用