132 votes

Utiliser la journalisation pour imprimer la sortie de pprint

Je veux utiliser la sortie de pprint pour afficher une structure de données complexe, mais je voudrais la sortir en utilisant le module de journalisation plutôt que stdout.

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

272voto

robert Points 10493

Utilisez pprint.pformat pour obtenir une chaîne, puis envoyez-la à votre cadre d'enregistrement.

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

23voto

Hywel Thomas Points 21

La solution ci-dessus ne l'a pas tout à fait coupé pour moi parce que j'utilise également un formateur pour ajouter le nom et le nom de niveau lors de la journalisation. Il semble un peu désordonné :

__main__    : DEBUG   : ['aaaaaaaaaaaaaaaaaaaa',
'bbbbbbbbbbbbbbbbbbbb',
'cccccccccccccccccccc',
'dddddddddddddddddddd']
__main__    : DEBUG   : Some other logging text

Il peut y avoir une solution plus élégante, mais ceci :

for line in pprint.pformat(ds).split('\n'):
    logging.debug(line)

produit quelque chose d'un peu plus agréable :

__main__    : DEBUG   : ['aaaaaaaaaaaaaaaaaaaa',
__main__    : DEBUG   :  'bbbbbbbbbbbbbbbbbbbb',
__main__    : DEBUG   :  'cccccccccccccccccccc',
__main__    : DEBUG   :  'dddddddddddddddddddd']
__main__    : DEBUG   : Some other logging text

2voto

Briford Wylie Points 162

Une alternative est d'utiliser json.dumps avec l'arg indent. Dans certains cas (selon le format d'enregistrement, la taille des données, etc.), cela peut vous donner une sortie plus agréable.

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"
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X