2010-07-22 8 views

risposta

5

logging.config.fileConfig('some.log') sta per provare a leggere configurazione di registrazione da some.log.

Non credo che ci sia un modo generale per recuperare il file di destinazione - non è sempre garantito persino di andare in un file. (Può andare a syslog, attraverso la rete, etc.)

8

avevo bisogno di fare qualcosa di simile in un ambiente molto semplice registrazione, la seguente routine di fatto il trucco

def _find_logger_basefilename(self, logger): 
    """Finds the logger base filename(s) currently there is only one 
    """ 
    log_file = None 
    parent = logger.__dict__['parent'] 
    if parent.__class__.__name__ == 'RootLogger': 
     # this is where the file name lives 
     for h in logger.__dict__['handlers']: 
      if h.__class__.__name__ == 'TimedRotatingFileHandler': 
       log_file = h.baseFilename 
    else: 
     log_file = self._find_logger_basefilename(parent) 

    return log_file  

che cercavo per il file usato da TimedRotatingFileHandler potrebbe essere necessario modificare il tipo di gestore che si cerca, probabilmente FileHandler.

Non so come andrebbe in qualsiasi tipo di ambiente di registrazione complesso.

-1

Nel mio caso, ho usato per inizializzare un singolo logger (nel mio script principale) e lo uso in tutti i miei pacchetti facendo locallogger = logging.getLogger(__name__). In questa configurazione per ottenere il percorso del file di registrazione ho dovuto modificare @ risposta di Giovanni come segue

def find_rootlogger_basefilename(): 
"""Finds the root logger base filename 
""" 
log_file = None 
rootlogger = logging.getLogger('') 
for h in rootlogger.__dict__['handlers']: 
    if h.__class__.__name__ == 'FileHandler': 
     log_file = h.baseFilename 
     break 
    elif h.__class__.__name__ == 'TimedRotatingFileHandler': 
     log_file = h.baseFilename 
     break 

return log_file 
5

Per il mio uso di base di un singolo file di log, questo ha funzionato

logging.getLoggerClass().root.handlers[0].baseFilename 
0

Sotto semplice logica per singolo file gestore:

>>> import logging 
>>> logger = logging.getLogger("test") 
>>> handler = logging.FileHandler("testlog.log") 
>>> logger.addHandler(handler) 
>>> print logger.handlers[0].baseFilename 
/home/nav/testlog.log 
>>> 
Problemi correlati