【发布时间】:2010-11-08 12:34:40
【问题描述】:
我了解 Python 记录器无法直接实例化,如文档所示:
请注意,Loggers 永远不会 直接实例化,但总是 通过模块级函数
logging.getLogger(name)
.. 这是合理的,因为您希望不会为每个类/模块创建记录器对象,因为有一个 better alternative。
但是,在某些情况下,我想创建一个记录器对象并将一个文件附加到它,专门用于将一些特定于应用程序的输出记录到该文件;然后关闭日志文件。
例如,我有一个程序可以在PyPI 中构建所有包。所以基本上假设每个包都有一个for 循环。在循环内部,我想“创建”一个记录器,附加一个文件处理程序(例如:/var/logs/pypi/django/20090302_1324.build.log 并将python setup.py build 的输出(连同其他内容)发送到此日志文件。一旦完成,我想关闭/销毁记录器并continue以类似的方式构建其他包。
所以你看.. 调用logging.getLogger 的正常Pythonic 方式在这里不适用。需要创建临时记录器对象。
目前,我通过将文件名本身作为记录器名称传递来实现这一点:
>>> packagelog = logging.getLogger('/var/..../..34.log')
>>> # attach handler, etc..
我想问..有没有更好的方法来做到这一点?
【问题讨论】:
-
您是在调用
python setup.py build作为子进程吗? -
@cdleary,是的,当然。并将其输出(除其他外)发送到此日志文件。