2010-07-22 105 views

回答

5

logging.config.fileConfig('some.log')將嘗試從some.log中讀取日誌配置

我不相信有一種通用的方法來檢索目標文件 - 它並不總是保證要去一個文件。 (它可以去系統日誌,通過網絡等)

8

我需要做一個非常簡單的日誌環境類似的東西,下面的程序做的伎倆

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  

我一直在尋找的文件由TimedRotatingFileHandler使用,您可能需要更改要搜索的處理程序的類型,可能是FileHandler。

不知道它會在任何類型的複雜日誌環境中如何去。

-1

在我的情況下,我曾經初始化一個記錄器(在我的主腳本中),並通過執行locallogger = logging.getLogger(__name__)在我的所有包中使用它。在此設置,以獲得日誌文件路徑,我不得不修改@約翰的回答如下

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

對於我的一個文件日誌的基本用法,這個工作

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

下面簡單的邏輯,單個文件處理者:

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