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

标签 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”记录器上的日志级别设置为 INFO。

我错过了什么?

最佳答案

我认为stalk是对的。事件记录到django.db传递给附加到 django.db 的处理程序记录器,但也会传递给 django 的处理程序和根记录器除非 propagate设置为False对于django.db记录器。请参阅this diagram了解记录器和处理程序的工作原理。

设置propagateFalse ,事件记录到django.db只会传递给sqlfile处理程序。

关于python - 配置 Django 日志记录 - SQL 和其他消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16256155/

相关文章:

Java 应用程序架构 - 需要一个日志记录名称,希望保持类解耦

python - 在数据框中标记用户的出席情况

Django celery 4 - ValueError : invalid literal for int() with base 10 when start celery worker

docker - 标准日志的生命周期和空间

python - 如何使用日志记录模块记录我的进程ID

python - 从 docker-compose 运行时容器以代码 0 退出

Python - 多处理 - 进程变成僵尸

python - 从数据库中获取数据并将其放入 GUI 中的表中

python - Pandas DataFrame 中的滞后变异

javascript - 用户对 Sentry 报告对话框未提交的反馈