有办法做到这一点吗?如果logging.config.fileConfig('some.log')
是设定者,那么吸气剂是什么?只是好奇这是否存在。
答案 0 :(得分:9)
我需要在一个非常简单的日志记录环境中做类似的事情,下面的例程就是这个技巧
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 :(得分:7)
对于我单个文件日志的基本用法,这个工作
logging.getLoggerClass().root.handlers[0].baseFilename
答案 2 :(得分:5)
logging.config.fileConfig('some.log')
将尝试从some.log中读取日志记录配置。
我不相信有一种通用的方法来检索目标文件 - 它并不总能保证甚至可以转到文件。 (它可以通过网络等进入系统日志。)
答案 3 :(得分:0)
单个文件处理程序的简单逻辑:
>>> import logging
>>> logger = logging.getLogger("test")
>>> handler = logging.FileHandler("testlog.log")
>>> logger.addHandler(handler)
>>> print logger.handlers[0].baseFilename
/home/nav/testlog.log
>>>
答案 4 :(得分:-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