Use logging print the output of pprint
An alternative is to use json.dumps
with the indent
arg. In some cases (depending on logging format, data size, etc) it might give you nicer output.
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'}
vs.
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"
}
The solution above didn't quite cut it for me because I'm also using a formatter to add name and levelname when logging. It looks a little untidy:
__main__ : DEBUG : ['aaaaaaaaaaaaaaaaaaaa',
'bbbbbbbbbbbbbbbbbbbb',
'cccccccccccccccccccc',
'dddddddddddddddddddd']
__main__ : DEBUG : Some other logging text
There may be a more elegant solution, but this:
for line in pprint.pformat(ds).split('\n'):
logging.debug(line)
produces something a little nicer:
__main__ : DEBUG : ['aaaaaaaaaaaaaaaaaaaa',
__main__ : DEBUG : 'bbbbbbbbbbbbbbbbbbbb',
__main__ : DEBUG : 'cccccccccccccccccccc',
__main__ : DEBUG : 'dddddddddddddddddddd']
__main__ : DEBUG : Some other logging text
Use pprint.pformat
to get a string, and then send it to your logging framework.
from pprint import pformat
ds = [{'hello': 'there'}]
logging.debug(pformat(ds))