我有以下代码
job_logger = logging.getLogger("abc")
job_handler = logging.FileHandler(filename)
job_logger.addHandler(job_handler)
print job_logger.something
我想要从job_logger对象中获取文件名。有任何建议吗?
我有以下代码
job_logger = logging.getLogger("abc")
job_handler = logging.FileHandler(filename)
job_logger.addHandler(job_handler)
print job_logger.something
我想要从job_logger对象中获取文件名。有任何建议吗?
假设当前job_logger
对象仅有一个处理程序。
>>> handler = job_logger.handlers[0]
>>> filename = handler.baseFilename
>>> print(filename)
'/tmp/test_logging_file'
当存在多个处理程序时,设计你的逻辑以获取它们全部或获取最后一个处理程序。
您可以使用以下代码获取logger中使用的处理程序列表:
>>>handlers = job_logger.handlers
>>>handlers
[<FileHandler ./mypath/job_logger.log (NOTSET)>]
在你的情况下,只有一个,@starrify的解决方案就足够了:
>>>handlers[0].baseFilename
'./mypath/job_logger.log'
>>> 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')}")