[英]Multi module python logger using the name of the main module
我有多个python模块,希望在保留这些日志中的调用层次结构的同时使用同一记录器。 我还想使用名称为调用模块(或调用模块堆栈)名称的记录器执行此操作。 除了弄乱堆栈跟踪之外,我一直无法弄清楚如何获得调用模块的名称,但是那感觉不是很pythonic。
这可能吗?
main.py
import logging
from sub_module import sub_log
logger = logging.getLogger(__name__)
logger.info("main_module")
sub_log()
sub_module.py
import logging
def sub_log():
logger = logging.getLogger(???)
logger.info("sub_module")
期望的输出
TIME main INFO main_module
TIME main.sub_module INFO sub_module
要解决pythonic问题,请使用Logger Formatter:
作为参考,请检查日志文档
main.py
import logging
from submodule import sub_log
from submodule2 import sub_log2
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
# create file handler which logs even debug messages
fh = logging.FileHandler('test.log')
fh.setLevel(logging.DEBUG)
# create formatter and add it to the handlers
formatter = logging.Formatter('%(asctime)s %(name)s.%(module)s - %(levelname)s - %(message)s')
fh.setFormatter(formatter)
# add the handlers to the logger
logger.addHandler(fh)
sub_log("test")
sub_log2("test")
submodule.py
import logging
import __main__
def sub_log(msg):
logger = logging.getLogger(__main__.__name__)
logger.info(msg)
我创建了第二个子模块。 (其他代号相同)
我的结果:
2018-10-16 20:41:23,860 __main__.submodule - INFO - test
2018-10-16 20:41:23,860 __main__.submodule2 - INFO - test
我希望这能帮到您 :)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.