【问题标题】:Why does INFO get logged in DEBUG logs为什么 INFO 会记录在 DEBUG 日志中
【发布时间】:2017-11-21 04:41:05
【问题描述】:

我正在使用 yaml 为我的 Python 应用程序配置日志记录。

version: 1
disable_existing_loggers: False

formatters:
    standard:
        format: "%(asctime)s - %(name)s - %(levelname)s - %(message)s"

handlers:
    console:
        class: logging.StreamHandler
        level: DEBUG
        formatter: standard
        stream: ext://sys.stdout

    info_file_handler:
        class: logging.handlers.RotatingFileHandler
        level: INFO
        formatter: standard
        filename: info.log
        maxBytes: 10485760 # 10MB
        backupCount: 20
        encoding: utf8

    error_file_handler:
        class: logging.handlers.RotatingFileHandler
        level: ERROR
        formatter: standard
        filename: errors.log
        maxBytes: 10485760 # 10MB
        backupCount: 20
        encoding: utf8

    debug_file_handler:
        class: logging.handlers.RotatingFileHandler
        level: DEBUG
        formatter: standard
        filename: debug.log
        maxBytes: 10485760 # 10MB
        backupCount: 20
        encoding: utf8

loggers:
        db_ops:
        level: DEBUG
        handlers: [info_file_handler, error_file_handler, debug_file_handler]
        propagate: true

在模块db_ops 中,我将logger.infologger.debug 用于不同级别的日志记录。当我运行应用程序时,INFO 确实将输出到 info.log,INFODEBUG 消息都输出到 debug.log。

根据级别将日志分隔到不同文件的正确方法是什么?

【问题讨论】:

    标签: python logging yaml


    【解决方案1】:

    python 记录器和处理程序的级别是阈值。如果您将级别指定为 DEBUG,则意味着将记录任何等于或高于 DEBUG 的内容。

    如果您只想进行 DEBUG 日志记录,则必须另外分配一个过滤器,该过滤器将过滤除 DEBUG 消息之外的任何内容。

    【讨论】:

    • 所以将所有级别的输出都输出到同一个文件会更好。这样您就不会在不同的文件中获得冗余日志?
    • 这真的取决于你如何利用日志记录。为本地开发启用 DEBUG 级别但在生产中设置 INFO 或更高级别以降低噪音级别并仅具有重要日志(通常是问题)是一种常见模式。但是,在其他情况下,您的日志记录需求可能会有所不同。例如,您可能希望错误转到 stderr 并定期输出到 stdout。对此没有硬性规定。在您的情况下,听起来您只需将所有内容都记录到同一个目的地就可以了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-02
    • 1970-01-01
    相关资源
    最近更新 更多