python - 使用主模块名称的多模块python记录器
问题描述
我有多个 python 模块,我想使用相同的记录器,同时在这些日志中保留调用层次结构。我还想使用名称为调用模块(或调用模块堆栈)名称的记录器来执行此操作。除了弄乱堆栈跟踪之外,我无法弄清楚如何获取调用模块的名称,但这感觉不是很pythonic。
这可能吗?
主文件
import logging
from sub_module import sub_log
logger = logging.getLogger(__name__)
logger.info("main_module")
sub_log()
子模块.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:
作为参考,请查看 Logging Docs
主文件
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")
子模块.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
我希望这能帮到您 :)
推荐阅读
- python - 如何将我的数据库的架构和定义保存到 MongoDB
- r - 在 R 中生成带有误差线的条形图
- ruby-on-rails - 如何使用 Ruby on rails 对 shopify 应用程序进行分页
- c++ - 如何通过在逗号后中断来制作 clang 格式包装函数?
- php -
小写字母遇到大写字母的PHP - r - 在 R 中实现算法 X
- php - Symfony 在序列化期间跳过空值
- python-3.x - 使用什么参数使 pytest-sugar 显示错误测试用例
- javascript - 获得不变违规:对象作为 React 子对象无效
- c# - SignalR Azure 服务开发