我正在尝试配置Django应用程序的日志记录,以便Django的ORM生成的所有SQL都记录到sql.log中,Django记录的所有其他消息都记录到另一个文件中。我的setup.py的日志记录部分如下所示:
'version': 1,
'disable_existing_loggers': False,
'formatters': ...
'handlers': {
'logfile' : {
'class': 'logging.handlers.WatchedFileHandler',
'filename': '.../django.log',
'formatter': 'verbose',
},
'sqlfile': {
'class': 'logging.handlers.WatchedFileHandler',
'filename': '.../sql.log',
'formatter': 'simple',
},
'apache_log': {
'class': 'logging.StreamHandler',
'level': 'ERROR',
'formatter': 'verbose',
}
},
'loggers': {
'django': {
'handlers': ['logfile', 'apache_log'],
'propagate': True,
'level': 'INFO',
},
'django.db': {
'handlers': ['sqlfile'],
'propagate': True,
'level': 'DEBUG',
},
}
SQL确实已经记录到sql.log,但它也被记录到django.log,虽然我特意将'django'记录器上的loglevel设置为INFO。
我错过了什么?
答案 0 :(得分:1)
我认为stalk
是正确的。记录到django.db
的事件将传递给附加到django.db
记录器的处理程序,但也会传递给django
和root记录程序的处理程序,除非propagate
设置为{{ 1}}用于False
记录器。有关记录器和处理程序的工作原理,请参阅this diagram。
将django.db
设置为propagate
,记录到False
的事件只会传递给django.db
处理程序。