Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python日志格式化程序,以额外的方式显示所有KWARG_Python_Logging - Fatal编程技术网

python日志格式化程序,以额外的方式显示所有KWARG

python日志格式化程序,以额外的方式显示所有KWARG,python,logging,Python,Logging,我希望在我的应用程序中添加以下日志点,并在控制台上显示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:

我希望在我的应用程序中添加以下日志点,并在控制台上显示
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
的所有文件都转储掉,而事先不知道
foo
bar

正在尝试解决相同的问题。问题是,传递给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 

作为
extra
传递的对象条目将成为日志记录的成员变量

logger.info('Status',extra={'my_params':{'foo':3,'bar':4})
然后您可以将其格式化为:

handler.setFormatter(logging.Formatter('%(消息)s%(我的参数)s'))
这将导致以下日志:

#> Status {'foo':3, 'bar':4}}
这假设您在记录时可以控制“extra”参数。

请查看。我没有时间写出一个完整的例子,但我认为您可以滥用日志记录上的args attr,只需传递一个dict。