web-dev-qa-db-fra.com

Python se connectant à stdout et au fichier journal

Je suis assez nouveau en python et commence à entrer dans le module de journalisation. Je souhaite que le message soit enregistré dans un fichier journal et transmis à la console. Le code ci-dessous imprime le message sur la console, mais comment puis-je obtenir que tout le message soit enregistré dans un fichier?

L'enregistreur n'a pas d'appel de fonction (basicConfig (filename =)) pour se connecter à un fichier. Comment puis-je ajouter cette fonctionnalité?

Merci pour l'aide à l'avance.

import logging

# create logger
logger = logging.getLogger(_name_)
logger.setLevel(logging.DEBUG)

# create console handler and set level to debug
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)

# create formatter
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

# add formatter to ch
ch.setFormatter(formatter)

# add ch to logger
logger.addHandler(ch)

# 'application' code
logger.debug('debug message')
logger.info('info message')
logger.warn('warn message')
logger.error('error message')
logger.critical('critical message')
17
Zen

Vous devez juste ajouter un autre gestionnaire, comme un logging.FileHandler

fh = logging.FileHandler(r'/path/to/log.txt')
logger.addHandler(fh)
16
Brendan Abel

Développer la réponse de @ Brendan.

Votre enregistreur envoie actuellement à la console une variable StreamHandler .

En ajoutant FileHandler , vous pouvez vous connecter à un fichier.

Chaque instance de gestionnaire peut être personnalisée pour avoir son propre format et son propre niveau de journalisation.

Si vous souhaitez vous connecter en utilisant le même format, vous devez également définir le format sur le nouveau FileHandler.

fh = logging.FileHandler(r'/path/to/log.txt')
fh.setFormatter(formatter)
logger.addHandler(fh)

En savoir plus: Livre de recettes de journalisation Python

7
victor

Après avoir utilisé le code de Waterboy pour la connexion simultanée à la console et au fichier (voir ce fil ) encore et encore dans plusieurs paquets Python, je l'ai finalement jeté dans un petit paquet Python autonome, que vous trouverez ici:

https://github.com/acschaefer/duallog

Le code est bien documenté et facile à utiliser. Il suffit de télécharger le fichier .py et de l’inclure dans votre projet ou d’installer le package complet via python setup.py install

En utilisant ce paquet, votre code ressemblerait à ceci:

# Set up logging to console and file.
import duallog
duallog.setup(logdir='my_logs')

# Generate log messages.
import logging    
logging.debug('debug message')
logging.info('info message')
logging.warn('warn message')
logging.error('error message')
logging.critical('critical message')
0
Lexxer