Comment aligner à droite le champ de niveau dans la journalisation Python.Formateur

J'essaie actuellement d'aligner à droite le champ de niveau de journalisation dans mon enregistreur Python afin que la sortie telle que:

[2011-10-14 13:47:51] [DEBUG] --- starting... (smtphandlers.py:96)
[2011-10-14 13:47:51] [INFO] --- first things first... (smtphandlers.py:97)
[2011-10-14 13:47:51] [WARNING] --- about to end... (smtphandlers.py:98)
[2011-10-14 13:47:51] [DEBUG] --- ending (smtphandlers.py:99)

À la place ressemble à:

[2011-10-14 13:47:51] [   DEBUG] --- starting... (smtphandlers.py:96)
[2011-10-14 13:47:51] [    INFO] --- first things first... (smtphandlers.py:97)
[2011-10-14 13:47:51] [ WARNING] --- about to end... (smtphandlers.py:98)
[2011-10-14 13:47:51] [   DEBUG] --- ending (smtphandlers.py:99)

La ligne de format du premier bloc est:

logging.Formatter("[%(asctime)s] [%(levelname)s] --- %(message)s (%(filename)s:%(lineno)s)", "%Y-%m-%d %H:%M:%S")

Si je sais que la longueur maximale du niveau est de 8 (par exemple: critique), alors je vais aligner à droite sur 8 espaces. Je suis à essayer de comprendre comment atteindre cet objectif. Ce qui suit échoue parce que "%(levelname)s " est plus de 8 caractères (la substitution ne se produit que plus tard). Si j'utilise quelque chose comme "{0:>20}".format "%(levelname)s", alors cela fonctionne, mais c'est plus de remplissage que ce dont j'ai besoin ou que je veux.

logging.Formatter("[%(asctime)s] [" + "{0:>8}".format"%(levelname)s" + "] --- %(message)s (%(filename)s:%(lineno)s)", "%Y-%m-%d %H:%M:%S")

À court de sous-classer le formateur, quelqu'un a un moyen d'y parvenir?

25
demandé sur stephen_liu 2011-10-14 22:25:13

2 réponses

Comme ceci:

logging.Formatter("[%(asctime)s] [%(levelname)8s] --- %(message)s (%(filename)s:%(lineno)s)", "%Y-%m-%d %H:%M:%S")
42
répondu retracile 2011-10-14 19:01:05

Essayez avec cette ligne de format:

logging.Formatter("[%(asctime)s] [%(levelname)8s] --- %(message)s (%(filename)s:%(lineno)s)", "%Y-%m-%d %H:%M:%S")

Python logger formatter utilise les règles de formatage de chaîne standard python

3
répondu Cédric Julien 2011-10-14 18:34:04