跨开源模块的Python日志记录

时间:2017-03-07 17:22:07

标签: python python-3.x logging module

我正在使用具有日志记录功能的python脚本。我已经阅读了logging模块的文档以及许多Stack Overflow帖子,并且我学到了很多东西,但是我仍然无法理解logging模块如何允许不同的模块发送将事件记录到同一目的地。

我的主模块使用了我在网上找到的python模块。此模块已设置日志记录以写入日志文件,但我希望它写入我在主模块中定义的日志文件。

#myModule.py
import logging
import otherModule

logger = logging.getLogger(__name__)
if __name__ == "__main__": 
    logger.setLevel(logging.DEBUG)
    handler = logging.FileHandler('my_log.log')
    handler.setLevel(logging.DEBUG)
    formatter = logging.Formatter('[%(asctime)s] %(levelname)%s: %(message)s')
    handler.setFormatter(formatter)
    logger.addHandler(handler)

def main():
    logger.info('hello world')
    otherModule.do_stuff()

如您所见,我明确设置了处理程序和格式化程序,然后将它们添加到我的记录器实例中。但这就是我正在使用的模块具有日志记录设置的方式:

#otherModule.py
import logging

logging.basicConfig(filename='otherModule.log', filemode='w')

def do_stuff():
    logging.info('Stuff is happening')

通过此设置,我有两个问题:

  1. 我们设置日志记录的方式有何不同?我一开始尝试使用logging.basicConfig(),但我无法将其写入日志文件(我可能做错了)。但是我想知道创建日志记录实例(logger = logging.getLogger(__name__))和直接调用日志记录函数(logging.info(msg))之间的区别。
  2. 如何让otherModule.py写入我的主模块中定义的相同日志文件,以及Python如何知道使用myModule.py中创建的记录器(我试图找到答案)通过查看Python文档,但他们大多只是说你可以跨多个模块登录到同一个地方)?由于它是一个开源模块,我宁愿不修改它供我自己使用。

1 个答案:

答案 0 :(得分:1)

这是模块执行自己的日志记录并且没有assert findFirstByKey(json, 'formField')?.name == "CUSTOM_347" 阻止的一般问题。当它们被导入时,您无法使它们遵循您的日志记录设置,因为它会被覆盖。如果您是这个开源项目的贡献者,我建议您提交补丁,否则只需将其报告为错误。修复它的方法是将上述标题添加到otherModule中的日志记录设置。