web-dev-qa-db-ja.com

ロギングを使用して、pprintの出力を印刷します

Pprintの出力を使用して複雑なデータ構造を表示したいのですが、stdoutではなくloggingモジュールを使用して出力したいと思います。

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

つかいます - pprint.pformat 文字列を取得し、それをロギングフレームワークに送信します。

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

上記の解決策はquiteをカットしませんでした。ロギング時に名前とレベル名を追加するためにフォーマッターも使用しているためです。少しだらしないように見えます:

__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
14
Hywel Thomas