import logging
from logging import FileHandler
# note, this will create a new logger if the name doesn't exist,
# which will have no handlers attached (yet)
logger = logging.getLogger('<name>')
for h in logger.handlers:
# check the handler is a file handler
# (rotating handler etc. inherit from this, so it will still work)
# stream handlers write to stderr, so their filename is not useful to us
if isinstance(h, FileHandler):
# h.stream should be an open file handle, it's name is the path
print(h.stream.name)
5条答案
按热度按时间frebpwbc1#
logging
模块使用附加到日志记录器的处理程序来决定消息最终存储或显示的方式、位置或时间。您可以将logging
默认配置为写入文件。您应该真正读取docs,但如果调用logging.basicConfig(filename=log_file_name)
,其中log_file_name
是要写入消息的文件名(注意你必须在logging
中的任何其他东西被调用之前这样做),那么所有记录到所有记录器的消息(除非以后发生一些进一步的重新配置)都将被写入那里。如果内存足够的话,info
低于默认日志级别,因此您还必须在basicConfig
的参数中包含level=logging.INFO
,这样您的消息才能在文件中结束。至于你问题的另一部分,
logging.getLogger(some_string)
返回一个Logger
对象,插入到根日志记录器层次结构中的正确位置,名称为some_string
的值。无参数调用,它返回根日志记录器。__name__
返回当前模块的名称,所以logging.getLogger(__name__)
返回一个Logger
对象,其名称设置为当前模块的名称。这是logging
使用的常见模式,因为它会导致日志记录器结构反映代码的模块结构,这通常会使日志记录消息在调试时更有用。wgmfuz8q2#
要获取简单文件记录器的日志位置,请尝试
m3eecexj3#
这方面有一些很好的答案,但top answer对我不起作用,因为我使用了不同类型的文件处理程序,handler.stream不提供路径,但提供文件句柄,从中获取路径有点不明显。下面是我的解决方案:
rt4zxlrg4#
要查找日志文件的位置,请尝试在您的环境中的Python shell中示例化
log
对象,并查看以下值:log.handlers[0].stream
u4vypkhs5#
很好的问题@zallarak。不幸的是,虽然它们很容易创建,但
Loggers
很难检查。这将获得logger
的所有Handlers
的文件名:try
块处理文件名查找失败时发生的异常。