首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >跨开源模块的Python日志记录

跨开源模块的Python日志记录
EN

Stack Overflow用户
提问于 2017-03-07 17:22:06
回答 1查看 126关注 0票数 2

我正在开发一个具有日志功能的python脚本。我已经阅读了logging模块的文档以及许多堆栈溢出帖子,并且我学到了很多,但我仍然很难理解logging模块如何允许不同模块将日志事件发送到同一个目的地。

我有我的主模块,它使用了我在网上找到的python模块。这个模块已经设置了日志以写入日志文件,但我希望它能够写入我在主模块中定义的日志文件。

代码语言:javascript
复制
#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()

如您所见,我显式地设置了我的处理程序和格式化程序,然后将它们添加到我的记录器实例中。但我使用的模块是这样设置日志的:

代码语言:javascript
复制
#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来找出答案,但它们大多只是说您可以跨多个模块登录到相同的位置)?因为它是一个开放源码模块,所以我不想自己修改它。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-07 19:15:06

这是做自己的日志记录并且没有if __name__ == "__main__":块的模块的一般问题。当它们被导入时,您不能让它们遵循您的日志设置,因为它会被覆盖。如果您是这个开源项目的贡献者,我建议您提交一个修补程序,否则只需将其报告为bug即可。修复它的方法是将前面提到的头添加到otherModule中的日志记录设置中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42654415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档