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
添加回答
舉報