使用日志打印输出

我想使用 pprint 的输出来显示一个复杂的数据结构,但是我想使用日志模块而不是 stdout 来输出它。

ds = [{'hello': 'there'}]
logging.debug( pprint.pprint(ds) ) # outputs as STDOUT
56118 次浏览

使用 pprint.pformat获取字符串,然后将其发送到日志框架。

from pprint import pformat
ds = [{'hello': 'there'}]
logging.debug(pformat(ds))

上面的解决方案没有为我的 没错削减它,因为我也使用格式化程序添加名称和级别名时日志。它看起来有点凌乱:

__main__    : DEBUG   : ['aaaaaaaaaaaaaaaaaaaa',
'bbbbbbbbbbbbbbbbbbbb',
'cccccccccccccccccccc',
'dddddddddddddddddddd']
__main__    : DEBUG   : Some other logging text

也许还有更好的解决办法,但这个办法:

for line in pprint.pformat(ds).split('\n'):
logging.debug(line)

产生一些更好的东西:

__main__    : DEBUG   : ['aaaaaaaaaaaaaaaaaaaa',
__main__    : DEBUG   :  'bbbbbbbbbbbbbbbbbbbb',
__main__    : DEBUG   :  'cccccccccccccccccccc',
__main__    : DEBUG   :  'dddddddddddddddddddd']
__main__    : DEBUG   : Some other logging text

另一种方法是将 json.dumpsindent参数一起使用。在某些情况下(取决于日志格式、数据大小等) ,它可能会提供更好的输出。

logging.error('Malformed input data!')
logging.error(pformat(foo))


ERROR:root:Malformed input data!
ERROR:root:{'a': 1, 'b': 2, 'c': 'womp rat', 'd': 'turd sandwich'}

对。

logging.error('Malformed input data!')
logging.error(json.dumps(foo, indent=4))


ERROR:root:Malformed input data!
ERROR:root:{
"a": 1,
"b": 2,
"c": "womp rat",
"d": "turd sandwich"
}