我有以下代码
job_logger = logging.getLogger("abc")
job_handler = logging.FileHandler(filename)
job_logger.addHandler(job_handler)
print job_logger.something
我想知道job_logger对象的文件名。有什么想法吗?
答案 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')}")