1 回答
TA贡献1829条经验 获得超7个赞
罪魁祸首在于你如何调用getLogger
函数。你有两次这样做:
logger = logging.getLogger(name)
里面my_object.py
_log = logging.getLogger(__name__)
里面toolbox.py
如果您比较这些调用返回的对象,它们是 2 个独立的对象(您可以通过 打印它们的地址print(id(obj))
)。这就是为什么logger
从不调用工具箱内的行 - 那里有一个不同的记录器(_log
)!
要修复您的错误,只需为您的记录器提供相同的名称 - 例如“全局”:
logger = logging.getLogger("global")
_log = logging.getLogger("global")
该文件的输出现在如下:
global - INFO - object1 is doing something
global - INFO - Using some tool for object1
在您的具体示例中,您可以将代码调整toolbox.py为:
import logging
def use_tool(name):
_log = logging.getLogger(name)
_log.info('Using some tool for {}'.format(name))
并将记录器留在里面my_object.py(logger = logging.getLogger(name))。如果您随后在 中执行以下操作main.py:
obj = MyObject('object1')
obj2 = MyObject('object2')
obj.do_something()
obj2.do_something()
你最终会得到 2 个日志文件:
对象1.log
object1 - INFO - object1 is doing something
object1 - INFO - Using some tool for object1
对象2.log
object2 - INFO - object2 is doing something
object2 - INFO - Using some tool for object2
添加回答
举报