2010-07-22 13 views

Respuesta

5

logging.config.fileConfig('some.log') va a tratar de leer configuración de registro de some.log.

No creo que haya una forma general de recuperar el archivo de destino; no siempre está garantizado que vaya a un archivo. (Puede ir a syslog, por la red, etc.)

8

que tenía que hacer algo similar en un entorno de registro muy simple, la siguiente rutina hizo el truco

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  

que estaba buscando el archivo utilizado por el TimedRotatingFileHandler, es posible que necesite cambiar el tipo de controlador que busca, probablemente FileHandler.

No estoy seguro de cómo sería en cualquier tipo de entorno de registro complejo.

-1

En mi caso, solía inicializar un único registrador (en mi script principal) y usarlo en todos mis paquetes haciendo locallogger = logging.getLogger(__name__). En esta configuración para obtener la ruta del archivo de registro que tenía que modificar @ respuesta de Juan de la siguiente manera

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

Para mi uso básico de un único archivo de registro, esto funcionó

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

A continuación lógica simple de una sola fila controlador:

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