我正在尝试在Python库模块中设置通用日志记录,以便它们使用在调用模块中配置的记录器,而无需硬编码记录器名称。我看到很多示例在调用模块中使用logging.basicConfig()并在库模块中调用logging.debug(),但是当我配置自己的StreamHandler时它不起作用。我做错了什么?
这是我的调用模块:
这是我的调用模块:
import logging, logging.handlers
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
consolehandler = logging.StreamHandler()
consoleformatter = logging.Formatter('[%(name)s] %(levelname)s %(message)s')
consolehandler.setFormatter(consoleformatter)
logger.addHandler(consolehandler)
import libmodule
def run():
logger.info("message from calling module")
libmodule.say("message from library module")
我已经在libmodule.py中尝试过这个:
import logging
def say(msg):
logging.info(msg)
以及这个:
import logging
logger = logging.getLogger()
def say(msg):
logger.info(msg)
但是当我调用run()时,无论哪种情况,我都会得到这个输出:
[callingmodule] INFO message from calling module
但是我预期的是这个:
[callingmodule] INFO message from calling module
[callingmodule] INFO message from library module
__file__
,另一个是根;两者都没有直接相互查看)。你是想允许用户将库记录器重定向到他们自己的记录器吗?标准的方法是有一个initLogger()
函数来初始化库记录器,你可以传递一个记录器进去。如果没有传入记录器,它会创建自己的记录器。就像这样。 - Corley BrigmaninitLogger()
方法听起来很有趣。你能给我指出一个例子吗? - Bruce Alport