【问题标题】:python log formatter that shows all kwargs in extrapython日志格式化程序,额外显示所有kwargs
【发布时间】:2016-10-10 19:56:14
【问题描述】:

我希望将以下日志点添加到我的应用程序中,并在控制台上显示extra的全部内容,例如,

logger.info('Status', extra={'foo':data})
logger.info('Status', extra={'bar':data})
logger.info('Status', extra={'foo':data, 'bar':data}) 

我希望看到:

2016-10-10 15:28:31,408, INFO, Status, foo=data
2016-10-10 15:38:31,408, INFO, Status, bar=data
2016-10-10 15:48:31,408, INFO, Status, foo=data, bar=data

这甚至可能吗?根据官方日志记录文档,Formatter 必须设置一个格式字符串,该字符串需要 foo 和 bar 但在我的情况下,我想要的只是在事先不知道 @ 的情况下转储 extra 的整个 kwargs 987654329@和bar。

【问题讨论】:

标签: python logging


【解决方案1】:

作为extra 传递的对象的条目将成为LogRecord 的成员变量。

logger.info('Status', extra={'my_params':{'foo':3, 'bar':4}})

然后你可以把它格式化为:

handler.setFormatter(logging.Formatter('%(message)s %(my_params)s'))

这将导致以下日志:

#> Status {'foo':3, 'bar':4}}

这假设您在记录时可以控制“额外”参数。

【讨论】:

    【解决方案2】:

    现在正在尝试解决同样的问题。问题是传递给 extra 的任何内容都作为 LogRecord 的属性添加,并且格式化程序无法将其与其他 LogRecord 属性区分开来。我只是想出了一种创建虚拟记录并将其与实际记录进行比较的骇人听闻的方法:

    class ExtraLogFormatter(logging.Formatter):                                                                             
        def format(self, record):                                                                                           
            dummy = logging.LogRecord(None,None,None,None,None,None,None)                                                   
            extra_txt = ''                                                                                                  
            for k,v in record.__dict__.items():                                                                             
                if k not in dummy.__dict__:                                                                                 
                    extra_txt += ', {}={}'.format(k,v)                                                                      
            message = super().format(record)                                                                                
            return message + extra_txt 
    

    【讨论】:

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