我有一个简单的项目结构 - 我的主模块调用驻留在同一个目录中的另外两个模块。我按照此答案的说明设置了我的测试。
我的代码如下:
主模块:
# log_test.py
import logging
import imported_1
import imported_2
def main():
logger = logging.getLogger(__name__)
logging.basicConfig(filename="test.log", format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger.setLevel(logging.DEBUG)
logger.debug("This is a debug message")
logger.info("For your info")
logger.warning("This is a warning message")
logger.error("This is an error message")
logger.critical("This is a critical message")
imported_1.one_fn(5, 6)
imported_2.two_fn(10, 20)
if __name__ == '__main__':
main()
导入的模块 - imported_1.py
# imported_1.py
import logging
logger = logging.getLogger(__name__)
def one_fn(x, y):
print(f"Logging function one with {x} and {y}")
logger.info(f"Logging function one with {x} and {y}")
和imported_2.py
# imported_2.py
import logging
logger = logging.getLogger(__name__)
def two_fn(x, y):
print(f"Logging function two with {x} and {y}")
logger.info(f"Logging function one with {x} and {y}")
生成的日志文件test.log
仅包含主log_test.py
模块中的条目。导入的模块未在此处记录:
2019-12-21 18:26:41,351 - __main__ - DEBUG - This is a debug message
2019-12-21 18:26:41,351 - __main__ - INFO - For your info
2019-12-21 18:26:41,351 - __main__ - WARNING - This is a warning message
2019-12-21 18:26:41,351 - __main__ - ERROR - This is an error message
我正在寻找来自导入模块的日志消息,以显示在 basicConfig 指定的同一日志文件中。我在这里做错了什么?
为了让 imported1 和 import2 的记录器知道您创建的原始记录器,它们必须是它的子记录器。
在python中,记录器由"."排列,因此记录器a.b.c
是记录器a.b
的子项,而记录器是a
的子项
你可以通过这种方式实现你想要的:
在log_test.py
logger = logging.getLogger('my_logger')
在imported_1.py
logger = logging.getLogger('my_logger.' + __name__) # will be my_logger.imported_1
在imported_2.py
logger = logging.getLogger('my_logger.' + __name__) # will be my_logger.imported_2
您可以在此处查看更多信息 https://docs.python.org/3/howto/logging-cookbook.html#using-logging-in-multiple-modules