捕获/返回Python日志的输出信息
有没有办法从调用 logging.debug() 中获取或返回消息呢?
谢谢
3 个回答
0
也许可以在启动时把 logging.debug
替换掉?
import logging
d = logging.debug
def myDebug(*args):
print "I'm a spy", args
d(*args)
logging.debug = myDebug
0
好吧,logging.debug 通常是把信息写到一个文件里。你可以用 open()
这个函数来读取那个文件。
4
没错,提供一种简单的方法来捕捉和重定向事件信息,而不需要修改发出这些事件的代码,这就是logging
模块的主要目的。
你只需要在应用程序启动时调用一下logging.basicConfig()
,就可以把记录的事件发送到你想要的地方。
最简单的方法就是直接记录到stdout
(标准输出)上:
import logging
import sys
logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)
如果你想了解更高级的选项,建议查看官方文档中的日志记录教程。
如果你想在调用时以编程方式获取格式化的信息,那么logging
模块就不太适合了。它是用来发出事件的,而不是用作直接调用str.format
的替代品。
针对你在评论中提到的情况,你可以考虑设置一种层级日志记录,大致如下:
>>> 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
理解日志记录器名称中的“父级.子级”表示法,所以它会把传递给子日志记录器的任何事件上送到主日志记录器,主日志记录器再把它们传递给根日志记录器。
你可以根据需要在master
和child
级别添加额外的日志处理器,以便将输出重定向到你想要的地方。