1

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

我错过了什么?

4

1 回答 1

1

我认为stalk是对的。记录到的事件django.db将传递给附加到django.db记录器的处理程序,但也将传递给处理程序django和根记录器,除非propagate为记录器设置Falsedjango.db。请参阅此图了解记录器和处理程序的工作方式。

使用 to 的设置,记录propagate到的False事件django.db将仅传递给sqlfile处理程序。

于 2013-04-27T23:27:30.950 回答