python中的记录器链

Zaa*_*Hai 5 python logging

我正在编写python包/模块,并希望日志消息提到它们来自哪个模块/类/函数.即如果我运行此代码:

import mymodule.utils.worker as worker

w = worker.Worker()
w.run()

我想记录消息如下:

2010-06-07 15:15:29 INFO mymodule.utils.worker.Worker.run <pid/threadid>: Hello from worker

我怎么能做到这一点?

谢谢.

Mik*_*ers 8

我倾向于在我的包/模块中使用日志记录模块,如下所示:

import logging
log = logging.getLogger(__name__)
log.info("Whatever your info message.")
Run Code Online (Sandbox Code Playgroud)

这会将记录器的名称设置为模块的名称以包含在日志消息中.您可以通过%(name)s格式字符串中的位置控制名称的位置.类似地,您可以将pid %(process)d和线程ID 放在一起%(thread)d.有关所有选项,请参阅文档.

格式化示例:

import logging
logging.basicConfig(format="%(asctime)s %(levelname)s %(name)s %(process)d/%(threadName)s: %(message)s")
logging.getLogger('this.is.the.module').warning('Testing for SO')
Run Code Online (Sandbox Code Playgroud)

给我:

2010-06-07 08:43:10,494 WARNING this.is.the.module 14980/MainThread: Testing for SO
Run Code Online (Sandbox Code Playgroud)