如何获取Python日志模块当前正在记录的文件?

问题描述 投票:0回答:6

有办法做到这一点吗?如果

logging.config.fileConfig('some.log')
是 setter,那么 getter 是什么?只是好奇这是否存在。

python logging
6个回答
21
投票

对于我对单个文件日志的基本使用,这很有效

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

10
投票

我需要在一个非常简单的日志环境中做类似的事情,下面的例程就成功了

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。

不确定在任何复杂的日志环境中会如何。


8
投票

以下是单文件处理程序的简单逻辑:

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

5
投票

logging.config.fileConfig('some.log')
将尝试从 some.log 读取 logging 配置

我不相信有一种通用的方法来检索目标文件——它并不总是保证能够访问文件。 (它可能会通过网络等进入系统日志)


0
投票

此解决方案尚不可用...

“类‘Handler’的未解析属性引用‘baseFilename’”


-1
投票

就我而言,我曾经初始化一个记录器(在我的主脚本中),并通过执行

locallogger = logging.getLogger(__name__)
在我的所有包中使用它。在此设置中,为了获取日志文件路径,我必须修改 @John 的答案,如下所示

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   
© www.soinside.com 2019 - 2024. All rights reserved.