将特定内容记录到文件的 Pythonic 方式?

Rei*_*ica 0 python logging

据我所知,Python 记录器不能直接实例化,如文档所示:

请注意,记录器永远不会直接实例化,而是始终通过模块级函数实例化 logging.getLogger(name)

..这是合理的,因为您不应该为每个类/模块创建记录器对象,因为有更好的选择

但是,在某些情况下,我想创建一个记录器对象并向其附加一个文件,专门用于将一些特定于应用程序的输出记录到该文件;然后关闭日志文件。

例如,我有一个程序可以在PyPI中构建所有包。所以基本上假设for每个包都有一个循环。在循环内,我想“创建”一个记录器,附加一个文件处理程序(例如:/var/logs/pypi/django/20090302_1324.build.log)并将输出python setup.py build(以及其他内容)发送到该日志文件。完成后,我想关闭/销毁记录器并continue以类似的方式构建其他包。

所以你看……正常的 Pythonic 调用方式logging.getLogger在这里不适用。需要创建临时记录器对象。

目前,我通过将文件名本身作为记录器名称传递来实现此目的:

>>> packagelog = logging.getLogger('/var/..../..34.log')
>>> # attach handler, etc..
Run Code Online (Sandbox Code Playgroud)

我想问..有更好的方法吗?

ars*_*ars 5

您可以使用一个记录器和多个处理程序,而不是使用多个记录器。例如:

log = logging.getLogger(name)
while some_condition:
    try:
        handler = make_handler(filename)
        log.addHandler(handler)
        # do something and log

    finally:
        log.removeHandler(handler)
        handler.close()
Run Code Online (Sandbox Code Playgroud)