我想使用 pprint 的输出来显示复杂的数据结构,但我想使用 logging 模块而不是 stdout 来输出它。
ds = [{'hello': 'there'}]
logging.debug( pprint.pprint(ds) ) # outputs as STDOUT
用于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.dumps
与indent
arg 一起使用。在某些情况下(取决于日志记录格式、数据大小等),它可能会为您提供更好的输出。
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"
}