2012-06-07 14 views
12

Ho un dict LOG_SETTINGS che assomiglia:utilizzando dictConfig nella registrazione python, è necessario creare un logger con un file diverso da quello definito in dict.

LOG_SETTINGS = { 
'version': 1, 
'handlers': { 
    'console': { 
     'class': 'logging.StreamHandler', 
     'level': 'INFO', 
     'formatter': 'detailed', 
     'stream': 'ext://sys.stdout', 
    }, 
    'file': { 
     'class': 'logging.handlers.RotatingFileHandler', 
     'level': 'INFO', 
     'formatter': 'detailed', 
     'filename': '/tmp/junk.log', 
     'mode': 'a', 
     'maxBytes': 10485760, 
     'backupCount': 5, 
    }, 

}, 
'formatters': { 
    'detailed': { 
     'format': '%(asctime)s %(module)-17s line:%(lineno)-4d ' \ 
     '%(levelname)-8s %(message)s', 
    }, 
    'email': { 
     'format': 'Timestamp: %(asctime)s\nModule: %(module)s\n' \ 
     'Line: %(lineno)d\nMessage: %(message)s', 
    }, 
}, 
'loggers': { 
    'extensive': { 
     'level':'DEBUG', 
     'handlers': ['file',] 
     }, 
} 
} 

Nel mio codice faccio la seguente:

logging.config.dictConfig(LOG_SETTINGS) 

logger = logging.getLogger('extensive') 
logger.info("This is from Runner {0}".format(self.default_name)) 

logger2 = logging.getLogger('extensive') 
logfile = logging.FileHandler("test.log") 
logger2.addHandler(logfile) 

logger2.info("This is from Runner {0} to the new file.".format(self.default_name)) 

Ma l'uscita è ancora scritto nel file di registro originale definito LOG_SETTINGS. Quello che sto cercando è avere la possibilità di dire: logger2.replaceHandler (logfile) piuttosto che addHandler.

C'è un modo per farlo?

risposta

13

in primo luogo, svuota i gestori del registratore logger.handlers = [] quindi aggiungi un altro gestore.

logger2 = logging.getLogger('extensive') 
logfile = logging.FileHandler("test.log") 
logger2.handlers = [] 
logger2.addHandler(logfile) 
+0

Grazie. Un'altra cosa che ho trovato è il 'removeHandler' [collegamento] (http://docs.python.org/library/logging.html#logging.Logger.removeHandler), ma non sono sicuro di cosa sia l''hdlr'? . – John

+0

per 'handler', è un oggetto gestore di registrazione. – iMom0

+0

Dovresti imparare ad accettare e votare le risposte che ti sono state utili – iMom0

Problemi correlati