【问题标题】:How to add a prefix to an existing python logging formatter如何为现有的 python 日志格式化程序添加前缀
【发布时间】:2015-05-13 16:54:53
【问题描述】:

在我的代码中,我从客户端获取了一个记录器,然后我做一些事情并将我的分析记录到记录器中。

我想将自己的前缀添加到记录器,但我不想创建自己的格式化程序,只是将我的前缀添加到现有的。

此外,我想在我的代码完成后删除我的前缀。

通过查看文档,我只能找到创建新格式化程序而不是修改现有格式化程序的方法。有办法吗?

【问题讨论】:

    标签: python logging


    【解决方案1】:

    这可以通过logging.LoggerAdapter实现

    import logging    
    
    
    class CustomAdapter(logging.LoggerAdapter):
        def process(self, msg, kwargs):
            return f"[my prefix] {msg}", kwargs
    
    
    logger = CustomAdapter(logging.getLogger(__name__))
    

    请注意,只有邮件会受到影响。但是这种技术可以用于更复杂的情况

    【讨论】:

      【解决方案2】:

      你是对的。根据Python 3Python 2 文档,无法在现有格式化程序对象上重置格式,您需要创建一个新的logging.Formatter 对象。但是,在运行时查看对象有 _fmt 方法来获取现有格式,并且似乎调整它会起作用。我在 2.7 中尝试过,它可以工作。下面是例子。

      python 2.7 的示例代码:

      import logging
      logger = logging.getLogger('something')
      myFormatter = logging.Formatter('%(asctime)s - %(message)s')
      handler = logging.StreamHandler()
      handler.setFormatter(myFormatter)
      logger.addHandler(handler)
      logger.setLevel(logging.DEBUG)
      logger.info("log statement here")
      
      #Tweak the formatter
      myFormatter._fmt = "My PREFIX -- " + myFormatter._fmt
      logger.info("another log statement here")
      

      输出:

      2015-03-11 12:51:36,605 - log statement here
      My PREFIX -- 2015-03-11 12:51:36,605 - another log statement here
      

      【讨论】:

        【解决方案3】:

        其实可以通过'basicConfig'来设置格式,在Python文档中有提到:https://docs.python.org/2/howto/logging-cookbook.html#context-info

        logging.basicConfig(level=logging.DEBUG,
                            format='%(asctime)-15s %(name)-5s %(levelname)-8s IP: %(ip)-15s User: %(user)-8s %(message)s')
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-11-28
          • 1970-01-01
          • 1970-01-01
          • 2013-09-02
          • 1970-01-01
          • 2011-11-02
          相关资源
          最近更新 更多