Python日志记录 - 检查日志文件的位置?

时间:2013-01-18 19:36:46

标签: python linux file logging

了解Python日志语句存储位置的方法是什么?

即。如果我这样做:

import logging
log = logging.getLogger(__name__)
log.info('Test')

我在哪里可以找到日志文件?另外,当我打电话时:

logging.getLogger(__name__)

这是否与记录器的行为/保存方式有关?

5 个答案:

答案 0 :(得分:20)

logging模块使用附加到记录器的处理程序来决定最终如何存储或显示消息的方式,位置或方式。您可以默认配置logging以写入文件。您应该真正阅读docs,但是如果您致电logging.basicConfig(filename=log_file_name),其中log_file_name是您要写入邮件的文件的名称(请注意,您必须先在logging之前执行此操作根本调用{1}},然后将所有记录到所有记录器的消息(除非稍后再进行一些重新配置)写入其中。请注意记录器设置的级别;如果内存服务,info低于默认日志级别,那么您必须在level=logging.INFO的参数中包含basicConfig以及最终在文件中的消息。< / p>

至于问题的其他部分,logging.getLogger(some_string)返回一个Logger对象,从根记录器插入到层次结构中的正确位置,其名称为{{1 }}。没有参数调用,它返回根记录器。 some_string返回当前模块的名称,因此__name__返回一个logging.getLogger(__name__)对象,其名称设置为当前模块的名称。这是与Logger一起使用的常见模式,因为它会导致记录器结构镜像代码的模块结构,这通常会使调度消息在调试时更有用。

答案 1 :(得分:9)

要获取简单文件记录器的日志位置,请尝试

logging.getLoggerClass().root.handlers[0].baseFilename

答案 2 :(得分:0)

要查找日志文件位置,请尝试在您环境中的Python shell中实例化log对象,并查看以下值:

log.handlers[0].stream

答案 3 :(得分:0)

优秀的问题@zallarak。不幸的是,虽然它们很容易创建,但Loggers很难检查。这会获得Handlers的所有logger的文件名:

filenames = []
for handler in logger.handlers:
    try:
        filenames.append(handler.fh.name)
    except:
        pass

try块处理文件名查找失败时发生的异常。

答案 4 :(得分:0)

对此有一些很好的答案,但最佳答案对我不起作用,因为我使用的是不同类型的文件处理程序,并且 handler.stream 不提供路径,但提供文件句柄,并获取路径这有点不明显。这是我的解决方案:

import logging
from logging.handlers 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)