2016-10-10 87 views
4

所有kwargs我希望以下日志点添加到我的应用程序和显示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必须设置一个格式字符串,预计foobar,但在我的情况下,我只想在没有预先知道foobar的情况下转储出extra的整个kwargs。

回答

0

试图立即解决同样的问题。问题是传递给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