我想将模块添加到使用标准Python(2.7)日志记录库的项目中。我想实现的是以下几点:使用Python日志记录器记录到文件和stderr
- 任何等于或大于警告去哪里主程序(我的控制范围之外)已配置日志去(通常是标准错误)
- 其他一切(调试更糟消息主要)转到日志文件
请注意,这里的关键问题是我不想修改全局日志记录设置,因为这些设置由主应用程序控制。否则,我会用例子在这里:
http://docs.python.org/2/howto/logging-cookbook.html#logging-to-multiple-destinations
我已经试过这样:
logger = logging.getLogger('my_module')
logger.setLevel(logging.WARNING)
fh = logging.FileHandler('my_module.log')
fh.setLevel(logging.DEBUG)
logger.addHandler(fh)
但当时我只是得到我的文件警告消息。
如果我替换上面的一行:
logger.setLevel(logging.DEBUG)
然后我得到了这两个标准错误,我的文件调试消息。
然后我尝试这样的:
logger = logging.getLogger('my_module')
logger.setLevel(logging.DEBUG)
logger.addHandler(logging.NullHandler())
console = logging.StreamHandler()
console.setLevel(logging.WARNING)
logger.addHandler(console)
fh = logging.FileHandler('my_module.log')
fh.setLevel(logging.DEBUG)
logger.addHandler(fh)
但同样没有运气。
所以,我可以实现这一点,而无需调用basicConfig()或其他任何影响全球日志记录基础设施?如果可能,我只想在这里修改我自己的模块。
谢谢!
感谢您的回复。如果无法这样做,那么在这种情况下,模块可以做什么?我不太了解你的关于为库配置DEBUG的函数的建议。除了文件,我不希望图书馆进行DEBUG,我希望看到所有内容。我不确定此记录器层次结构如何工作:我创建的记录器是应用程序配置的根记录器的子项? – introiboad
@introiboad:我在评论中添加了对问题的答案。 – jfs
谢谢你的回答。 – introiboad