捕获/返回python日志记录的输出消息

时间:2011-04-13 12:52:23

标签: python

有没有办法从调用logging.debug()获取/返回消息?

由于

3 个答案:

答案 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”符号,因此它会将传递给子记录器的任何事件传递给主记录器,后者又将它们传递给根记录器。

您可以根据需要在masterchild级别添加其他日志记录处理程序,以便将输出重定向到您希望的位置。

答案 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