配置Django日志记录 - SQL和其他消息

时间:2013-04-27 19:40:48

标签: python django logging

我正在尝试配置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。

我错过了什么?

1 个答案:

答案 0 :(得分:1)

我认为stalk是正确的。记录到django.db的事件将传递给附加到django.db记录器的处理程序,但也会传递给django和root记录程序的处理程序,除非propagate设置为{{ 1}}用于False记录器。有关记录器和处理程序的工作原理,请参阅this diagram

django.db设置为propagate,记录到False的事件只会传递给django.db处理程序。