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

sqyvllje  于 2023-04-20  发布在  Linux
关注(0)|答案(5)|浏览(167)

了解Python日志语句存储位置的方法是什么?
例如,如果我这样做:

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

在哪里可以找到日志文件?另外,当我调用:

logging.getLogger(__name__)

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

frebpwbc

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使用的常见模式,因为它会导致日志记录器结构反映代码的模块结构,这通常会使日志记录消息在调试时更有用。

wgmfuz8q

wgmfuz8q2#

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

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

m3eecexj3#

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

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)
rt4zxlrg

rt4zxlrg4#

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

u4vypkhs

u4vypkhs5#

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

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

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

相关问题