[英]Django: Setting LOGGER doesn't work
我在Django的记录系统上遇到问题。 我的目标是将所有类型的日志记录到文件中,并且仅在DEBUG
设置为True
(现在是正确的)时才记录到控制台。
照原样,日志文件保持空白(尽管它们是由Django创建的)。 当我启动服务器(使用python3 manage.py runserver
)时,在外壳中看到以下内容:
Warning!
Error!
... (normal server stuff)
但是没有任何内容写入任何日志文件。
如果我取消注释__init__.py中的 logging.error('== == START LOGGER == ==')
和logr.setLevel('DEBUG')
,则外壳读取:
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'
(这绝对不起作用)
我没有足够的分数来添加评论,因此在这里我要提到,如果您的日志记录格式使用%(name)s
那么上述答案的一个有用扩展是在您拥有的文件中:
logr = logging.getLogger('project')
您可以使用:
logr = logging.getLogger('project.%s' % __name__)
然后,这意味着您的项目记录器将报告完整的应用程序名称,例如。 'project.polls.views'
您的__init__.py文件在settings.py之前被调用
将您的代码从__init__.py移至其他任何文件,这些文件将在settings.py之后调用
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.