La réponse ci-dessus n'est pas vraiment correcte - elle ne fera que placer la barre plus haut pour que les messages des autres modules soient affichés.
Une approche très rapide serait d'utiliser ce morceau de code :
import logging.config
logging.config.dictConfig({
'version': 1,
'disable_existing_loggers': True,
})
Vous devez définir ce paramètre après avoir importé tous les modules - cela désactivera tous les enregistreurs qui ont été créés jusqu'à ce point. Cela fonctionnera la plupart du temps, mais certains modules créent leur logger lorsque vous créez une instance de classe par exemple (ce qui se produirait plus tard dans votre code).
Lorsque vous configurez les enregistreurs selon le tutoriel de base de python, ils vous disent d'utiliser logging.basicConfig(...)
. Cela pose un problème car le gestionnaire (c'est-à-dire l'endroit où le journal sera acheminé) sera défini comme suit logging.lastResort
qui est stderr à partir de Python 3.2 pour tous dans le processus. Cela signifie que vous avez maintenant activé la journalisation complète pour tous les modules.
Une meilleure approche consiste donc à créer un enregistreur différent uniquement pour vos modules et à lui donner ses propres gestionnaires, au lieu d'utiliser la fonction basicConfig()
.
Il y a deux façons de le faire :
1) Toutes les fonctions :
import logging
log = logging.getLogger(__name__)
log.setLevel(logging.DEBUG)
formatter = logging.Formatter(fmt="%(asctime)s %(levelname)s: %(message)s",
datefmt="%Y-%m-%d - %H:%M:%S")
ch = logging.StreamHandler(sys.stdout)
ch.setLevel(logging.DEBUG)
ch.setFormatter(formatter)
fh = logging.FileHandler("mylog.log", "w")
fh.setLevel(logging.DEBUG)
fh.setFormatter(formatter)
log.addHandler(ch)
log.addHandler(fh)
Cela vous donnera le logger log
que vous pouvez ensuite utiliser comme log.error("Error found")
. Il écrira dans un nouveau fichier appelé mylog.log et enregistrera également dans sys.stdout. Vous pouvez bien sûr modifier ces paramètres comme vous le souhaitez.
2) Utiliser un dictateur :
import logging
import logging.config
DEFAULT_LOGGING = {
'version': 1,
'formatters': {
'standard': {
'format': '%(asctime)s %(levelname)s: %(message)s',
'datefmt': '%Y-%m-%d - %H:%M:%S' },
},
'handlers': {
'console': {'class': 'logging.StreamHandler',
'formatter': "standard",
'level': 'DEBUG',
'stream': sys.stdout},
'file': {'class': 'logging.FileHandler',
'formatter': "standard",
'level': 'DEBUG',
'filename': 'live_detector.log','mode': 'w'}
},
'loggers': {
__name__: {'level': 'INFO',
'handlers': ['console', 'file'],
'propagate': False },
}
}
logging.config.dictConfig(DEFAULT_LOGGING)
log = logging.getLogger(__name__)
Cela donnera le même résultat que le précédent, un peu plus long, mais peut-être plus facile à lire. Cela mettra aussi automatiquement 'disable_existing_loggers': True
. Si vous ne voulez pas cela, vous devez l'ajouter et le définir sur False.