调用getLogger()后,如何获取python logging对象的给定实例的日志(log)文件路径?

我的python应用程序在主python脚本中设置日志(log)记录,如下所示.

import loggging

logging.basicConfig(
 filename = '/path/to/log/file.log',
 filemode = 'a',
 format = '%(asctime)s,%(msecs)d %(name)s %(levelname)s %(message)s',
 datefmt = '%H:%M:%S',
 level = logging.DEBUG
)

logging.info("===============================================================================")
logging.info( "Starting Application Logging" )

然后同一应用程序中的其他脚本使用getLogger()获得日志(log)配置,如下所示

import logging

logger = logging.getLogger( __name__ )
logger.info( "Logging Config Imported in Second Script" )

在第二个脚本中,只获取getLogger()的日志(log)配置,我想知道日志(log)文件的路径.

在使用getLogger()设置日志(log)记录后,如何确定日志(log)文件的完整路径?

推荐答案

您可以通过判断根记录器的处理程序并判断其baseFilename来获取日志(log)文件的文件名(如果有)

tl;博士

例如,从下面更新您的示例

import logging

logger = logging.getLogger( __name__ )
logger.info( "Logging Config Imported in Second Script" )

到这个

import logging

logger = logging.getLogger( __name__ )
logger.info( "Logging Config Imported in Second Script" )

if logger.root.hasHandlers():
   logfile_path = logger.root.handlers[0].baseFilename
   logger.info( "Logging to File " + str(logfile_path) )

解决方案

实际上,设置为getLogger()的日志(log)实例可以写入零或many个日志(log)文件.

您可以使用root logger(名为logger.root)上的hasHandlers()函数判断是否有任何日志(log)文件正在写入.

logger.root.hasHandlers():

如果日志(log)记录对象使用的值大于0 Handlers,则hasHandlers()将返回True.

从那里,您可以通过使用logger.root.handlers遍历根记录器中的处理程序列表来获得处理程序列表.

在上面的示例中,我们只抓取第一个处理程序(列表中的第0项).

logger.root.handlers[0]

我在任何地方都没有找到它的文档,但是如果您使用check the code of the logging module's FileHandler class,那么您可以看到它有一个名为baseFilename的实例变量,其中包含FileHandler的文件路径

class FileHandler(StreamHandler):
    """
    A handler class which writes formatted logging records to disk files.
    """
    def __init__(self, filename, mode='a', encoding=None, delay=False, errors=None):
        """
        Open the specified file and use it as the stream for logging.
        """
...
        self.baseFilename = os.path.abspath(filename)

(source)

因此,只需将名为baseFilename的实例变量附加到第一个文件处理程序的末尾,就可以得到日志(log)文件的绝对路径

logfile_path = logger.root.handlers[0].baseFilename

Python相关问答推荐

运行Python脚本时,用作命令行参数的SON文本

从numpy数组和参数创建收件箱

用NumPy优化a[i] = a[i-1]*b[i] + c[i]的迭代计算

如何在给定的条件下使numpy数组的计算速度最快?

如果条件不满足,我如何获得掩码的第一个索引并获得None?

Stacked bar chart from billrame

Pandas—在数据透视表中占总数的百分比

如何使Matplotlib标题以图形为中心,而图例框则以图形为中心

如何在图中标记平均点?

如何保持服务器发送的事件连接活动?

人口全部乱序 - Python—Matplotlib—映射

一个telegram 机器人应该发送一个测验如何做?""

需要帮助使用Python中的Google的People API更新联系人的多个字段'

为罕见情况下的回退None值键入

在round函数中使用列值

时长超过24小时如何从Excel导入时长数据

如何在Polars中处理用户自定义函数的多行结果?

Python:使用asyncio.StreamReader.readline()读取长行

如何使用count()获取特定日期之间的项目

PANDA:如何将多选列转换为索引/列