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

时间:2014-09-24 12:35:31

标签: 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对象的文件名。有什么想法吗?

3 个答案:

答案 0 :(得分:10)

假设job_logger对象现在只有一个处理程序。

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

当有多个处理程序时,设计你的逻辑以获取它们或获得最后一个。

答案 1 :(得分:0)

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

for (let i = 1; i <= 8; i++) {
    let shape = '';

    for (var j = 1; j <= i; j++) {
        shape += '*';
    }
    console.log(shape);
}

由于您只有一个,因此@starrify解决方案就足够了:

>>>handlers = job_logger.handlers
>>>handlers
[<FileHandler ./mypath/job_logger.log (NOTSET)>]

如果您有更多处理程序,而有些不是FileHandler,则可以使用列表推导对其进行过滤:

>>>handlers[0].baseFilename
'./mypath/job_logger.log'

答案 2 :(得分:0)

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

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