129

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

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

3 回答 3

266

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

from pprint import pformat
ds = [{'hello': 'there'}]
logging.debug(pformat(ds))
于 2012-06-19T01:27:03.697 回答
22

上面的解决方案并没有完全适合我,因为我还在使用格式化程序在记录时添加名称和级别名称。看起来有点乱:

__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
于 2014-01-09T15:33:53.167 回答
0

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

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"
}
于 2021-12-28T20:31:43.203 回答