代码之家  ›  专栏  ›  技术社区  ›  Mike Williamson

python`logging`module+yaml配置文件

  •  0
  • Mike Williamson  · 技术社区  · 7 年前

    我发现了很多文档和教程,比如 official logging config docs , the official logging cookbook 和这个 nice tutorial by Fang .

    他们每个人都让我接近一个答案,但并不完全。我的问题是:

    在使用配置文件时,如何在两个单独的级别上使用带有两个单独处理程序的记录器?


    为了澄清,下面是我的yaml文件的一个示例:

    ---
    version: 1
    handlers:
      debug_console:
        class: logging.StreamHandler
        level: DEBUG
    .
    .
    .
    
      info_file_handler:
        class: logging.handlers.RotatingFileHandler
        level: INFO
    .
    .
    .
    
    loggers:
      dev:
        handlers: [debug_console, info_file_handler]
      test:
        handlers: [info_file_handler]
    root:
      handlers: [info_file_handler]
    

    我想拥有 两种方式 运行记录器,其中( dev )比另一个更冗长。 此外,在运行 DEV Logger,我希望它为两个不同的处理程序有两个不同的级别。

    这是尝试启动记录器的代码片段:

    with open('logging.yaml', 'r') as f:
      log_cfg = yaml.safe_load(f.read())
      logging.config.dictConfig(log_cfg)
      my_logger = logging.getLogger('dev')
    

    这个 dictConfig 上面的线工作正常。我这么说是因为当我看到要求登录控制台的代码时,我会看到 DEV 作为日志打印时的名称。(我编辑过山药,但它包含 %(name)s 格式)。

    但是有点不对劲 my_logger . 尽管 它与 名称 属于 DEV ,其他属性似乎都没有设置。具体来说,我看到:

    >>> my_logger
    <Logger dev_model (WARNING)>
    

    我不知道 登录中 模块足以理解问题所在。我什么 希望 是:

    当我激活 'dev' 记录器,我要启动两个处理程序,其中一个在 DEBUG 级别并写入控制台,另一个位于 INFO 级别并写入文件。

    怎么能做到?

    2 回复  |  直到 7 年前
        1
  •  2
  •   dvk    7 年前

    如果我正确地理解了这个问题,那么问题是由日志记录器本身具有日志级别而不仅仅是处理程序造成的。记录器的日志级别默认为 WARNING ,它似乎设置在您的记录器上。如果生成的消息的优先级低于记录器的级别,则它甚至不向处理程序发出。

    所以试着设置记录器 level DEBUG . info_file_handler 应忽略任何比其自身级别更详细的消息。

    关于这一部分:

    其他属性似乎都没有设置。

    发生了什么事,记录器 repr() 方法将日志记录器转换为某种字符串表示形式,以便呈现它。它不能保证显示对象的所有属性。

        2
  •  0
  •   Sraw    7 年前

    这么长的问题…太久了,我无法理解。

    但我认为你误解了管理者的工作方式。实际上,记录器本身不输出任何内容,但处理程序会输出。

    所以假设你设置了 DEBUG dev 记录器,它将传递日志>。= 调试 给所有的处理者。然后 debug_console 处理程序将处理日志>。= 调试 但是 info_file_handler 只处理日志& gt;= INFO . 设置 调试 DEV 记录器不会让 信息文件处理程序 输出日志< 信息 . 所以您可以有两个单独的级别,其中一个是>。= 调试 当另一个是>时转到控制台= 信息 然后去存档。

    我想我理解你是对的…

    推荐文章