152 votes

logging.info ne s'affiche pas sur la console mais les avertissements et les erreurs le font.

Lorsque j'enregistre un événement avec logging.info il n'apparaît pas dans le terminal Python.

import logging
logging.info('I am info')  # no output

En revanche, les événements enregistrés avec logging.warn apparaissent dans le terminal.

import logging
logging.warn('I am warning')  # outputs "I am warning"

Y a-t-il un changement au niveau de l'environnement que je peux faire logging.info imprimer dans la console ? Je veux éviter de faire des modifications dans chaque fichier Python.

220voto

Ztyx Points 1617

Le logger Root est toujours réglé par défaut sur le niveau WARNING. Essayez d'appeler

logging.getLogger().setLevel(logging.INFO)

et vous devriez vous en sortir.

51voto

Vlad Bezden Points 5024

Comme @ztyx l'a dit, le niveau de journalisation par défaut est WARNING. Vous devez le régler à un niveau inférieur

Vous pouvez le faire en utilisant logging.basicConfig et la mise en place niveau du collecteur :

logging.basicConfig(level=logging.DEBUG)

31voto

Orly Points 340

Les solutions ci-dessus n'ont pas fonctionné pour moi, mais le code aquí a fait :

# set up logging to file
logging.basicConfig(level=logging.DEBUG,
                    format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s',
                    datefmt='%m-%d %H:%M',
                    filename='/temp/myapp.log',
                    filemode='w')
# define a Handler which writes INFO messages or higher to the sys.stderr
console = logging.StreamHandler()
console.setLevel(logging.INFO)
# add the handler to the root logger
logging.getLogger('').addHandler(console)

(J'ai omis certaines parties du code pour des raisons de lisibilité)

18voto

Deepak Chauhan Points 181

Cela va fonctionner

import logging

logging.basicConfig()
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)

logger.info('its working')

4voto

KFL Points 1082

Quel est le code minimum requis pour un enregistreur de niveau module qui fonctionne ? J'ai fait une expérience (avec la version 3.8.6 de python).

La leçon à retenir est la suivante :

  • logging.basicConfig() est nécessaire (cependant, spécifier level=... n'est PAS nécessaire)
  • c'est nécessaire pour configurer le logger Root : logging.getLogger().setLevel(...)

Donc, un exemple minimum de travail est :

# in library/module code
import logging
lg = logging.getLogger('x.y.z')

# in application code
logging.basicConfig()
logging.getLogger().setLevel(logging.INFO)  # configure root logger
lg.info("hi")  # this should print now

Voici l'expérience :

In [1]: import logging

In [2]: lg = logging.getLogger('x.y.z')

In [3]: lg.info(1)

In [4]: logging.basicConfig()

In [5]: lg.info(1)

In [6]: logging.basicConfig(level=logging.INFO)

In [7]: lg.info(1)

In [8]: logging.basicConfig()

In [9]: logging.getLogger().setLevel(logging.INFO)

In [10]: lg.info(1)
INFO:x.y.z:1

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