web-dev-qa-db-fra.com

Utiliser la journalisation pour imprimer la sortie de pprint

Je veux utiliser la sortie de pprint pour montrer 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
79
yee379

Utilisation pprint.pformat pour obtenir une chaîne, puis l'envoyer à votre infrastructure de journalisation.

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

La solution ci-dessus ne l'a pas tout à fait coupée pour moi car j'utilise également un formateur pour ajouter un nom et un nom de niveau lors de la connexion. Ça a l'air 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 celle-ci:

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