Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从python记录器获取文件名_Python_Python 2.7_Logging - Fatal编程技术网

如何从python记录器获取文件名

如何从python记录器获取文件名,python,python-2.7,logging,Python,Python 2.7,Logging,我有以下代码 job_logger = logging.getLogger("abc") job_handler = logging.FileHandler(filename) job_logger.addHandler(job_handler) print job_logger.something 我想知道job_logger对象的文件名。有什么想法吗?假设job\u logger对象目前只有一个处理程序 >>> handler = job_logger.handlers[

我有以下代码

job_logger = logging.getLogger("abc")
job_handler = logging.FileHandler(filename)
job_logger.addHandler(job_handler)
print job_logger.something

我想知道job_logger对象的文件名。有什么想法吗?

假设
job\u logger
对象目前只有一个处理程序

>>> handler = job_logger.handlers[0]
>>> filename = handler.baseFilename
>>> print(filename)
'/tmp/test_logging_file'

当有多个处理程序时,设计逻辑以获取所有处理程序或最后一个处理程序。

您可以使用以下方法获取记录器中使用的处理程序列表:

>>>handlers = job_logger.handlers
>>>handlers
[<FileHandler ./mypath/job_logger.log (NOTSET)>]
如果您有更多的处理程序,但有些不是文件处理程序,则可以使用列表对其进行筛选:

>>> log_paths = [handler.baseFilename for handler in job_logger.handlers if isinstance(handler, logging.FileHandler)]
>>> next(iter(log_paths))
'./mypath/job_logger.log'

注释,但带有代码格式 baseFilename只存在于FileHandler子类中,因此

for handler in job_logger.handlers:
    if hasattr(handler, "baseFilename"):
        print(f"writing log to {getattr(handler, 'baseFilename')}")


谢谢你!你认为这是唯一能识别它的方法吗then@hyades我很乐意提供帮助。在我的项目的不同背景下,这对我不起作用。所做的工作是:my_logger.root.handlers[0]。BaseFileName错误:模块“logging”没有属性“handlers”@FernandoV您首先需要创建记录器实例“root=logging.getLogger()”,然后您可以直接从实例访问处理程序列表:“root.handlers”。
for handler in job_logger.handlers:
    if hasattr(handler, "baseFilename"):
        print(f"writing log to {getattr(handler, 'baseFilename')}")