有没有办法从调用logging.debug()获取/返回消息?
由于
答案 0 :(得分:4)
是的,提供一种机制来轻松捕获和重定向事件详细信息,而无需对发出事件的代码进行任何修改,这是logging
模块的全部目的。
您需要做的就是在应用程序启动时包含对logging.basicConfig()
的适当调用,并且您可以在任何地方发送已记录的事件。
最简单的方法是只登录stdout
:
import logging
import sys
logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)
对于更高级的选项,我建议您查看官方文档中的logging tutorial。
如果您希望在进行调用时以编程方式访问格式化消息...那么logging
模块是该作业的错误工具。它用于发出事件,而不是用作直接调用str.format
的替代方法。
对于您在评论中描述的情况,您可能需要考虑以下几行hierarchical logging设置:
>>> import logging
>>> import sys
>>> logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)
>>> master = logging.getLogger("master")
>>> child1 = logging.getLogger("master.child1")
>>> child2 = logging.getLogger("master.child2")
>>> child1.debug("Event from child 1")
DEBUG:master.child1:Event from child 1
>>> child2.debug("Event from child 2")
DEBUG:master.child2:Event from child 2
在此设置中,请注意我只在层次结构的根级别配置了一个处理程序(作为basicConfig()
调用的一部分)。 logging
了解记录器名称中的“parent.child”符号,因此它会将传递给子记录器的任何事件传递给主记录器,后者又将它们传递给根记录器。
您可以根据需要在master
和child
级别添加其他日志记录处理程序,以便将输出重定向到您希望的位置。
答案 1 :(得分:0)
好吧,logging.debug通常写入文件。您可以使用open()
函数读取该文件。
答案 2 :(得分:0)
也许在启动时替换logging.debug
?
import logging
d = logging.debug
def myDebug(*args):
print "I'm a spy", args
d(*args)
logging.debug = myDebug