Ведение журнала печать выходных данных печатные


Я хочу использовать вывод pprint для отображения сложной структуры данных, но я хотел бы вывести его с помощью модуля ведения журнала, а не stdout.

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

2 ответа:

использовать pprint.pformat чтобы получить строку, а затем отправить ее в свою структуру ведения журнала.

from pprint import pprint, 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