2010-07-22 10 views

Odpowiedz

5

logging.config.fileConfig('some.log') spróbuje odczytać konfigurację logowania z some.log.

Nie sądzę, że istnieje ogólny sposób na odzyskanie pliku docelowego - nie zawsze jest gwarantowane, że uda się nawet do pliku. (To może iść do syslog, sieć, itd.)

8

muszę zrobić coś podobnego w bardzo prosty środowiska rejestrowania następujące rutynowe wystarczyły

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  

szukałem pliku używany przez TimedRotatingFileHandler, możesz potrzebować zmienić typ szukanego handlera, prawdopodobnie FileHandler.

Nie jestem pewny, jak by to przebiegło w złożonym środowisku logowania.

-1

W moim przypadku użyłem do zainicjowania pojedynczego programu rejestrującego (w moim głównym skrypcie) i użycia go we wszystkich moich pakietach, wykonując locallogger = logging.getLogger(__name__). W tej konfiguracji, aby uzyskać ścieżkę do pliku logowania musiałem zmodyfikować @ Jana odpowiedź następująco

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

dla mojego podstawowego wykorzystania pojedynczego pliku dziennika, ten pracował

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

Poniżej prostej logiki dla pojedynczego pliku obsługujący:

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