2011-07-03 2 views
1

J'essaie d'inclure la connexion simple dans mon application en utilisant TimedRotatingFileHandler. Cependant, je reçois la sortie à la fois dans le fichier désigné et dans l'erreur standard. Je réduit le problème à un petit exemple:Python TimedRotatingFileHandler enregistre dans un fichier et stderr

import logging, logging.handlers 
import sys 

logging.basicConfig(format='%(asctime)s %(message)s') 
loghandler = logging.handlers.TimedRotatingFileHandler("logfile",when="midnight") 
logger = logging.getLogger() 
logger.setLevel(logging.INFO) 
logger.addHandler(loghandler) 

for k in range(5): 
    logger.info("Line %d" % k) 

Je reçois 5 lignes de journaux à la fois dans mon « logfile » et STDERR de ce programme. Qu'est-ce que je fais mal?

Répondre

2

logging.basicConfig définit un gestionnaire qui imprime à l'erreur standard. logger.addHandler(loghandler) met en place un TimedRotatingFileHandler.

Souhaitez-vous supprimer la sortie de l'erreur standard? Si oui, il suffit de supprimer l'appel à logging.basicConfig.

+0

Merci, ça marche! – Tsf

+0

Notez que vous pouvez ajouter plusieurs gestionnaires selon https://docs.python.org/2/howto/logging-cookbook.html#multiple-handlers-and-formatters – MarkHu

7

Ceci est la façon dont vous pouvez avoir l'impression que sur les fichiers journaux et de ne pas stdout/stderr:

import logging 
from logging.handlers import TimedRotatingFileHandler 

logHandler = TimedRotatingFileHandler("logfile",when="midnight") 
logFormatter = logging.Formatter('%(asctime)s %(message)s') 
logHandler.setFormatter(logFormatter) 
logger = logging.getLogger('MyLogger') 
logger.addHandler(logHandler) 
logger.setLevel(logging.INFO) 

for k in range(5): 
    logger.info("Line %d" % k) 
+0

Cela fonctionne également, merci! – Tsf

Questions connexes