gpt4 book ai didi

跨开源模块的 Python 日志记录

转载 作者:太空宇宙 更新时间:2023-11-04 05:12:33 25 4
gpt4 key购买 nike

我正在开发一个具有日志记录功能的 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 文档找出答案,但他们大多只是说你可以跨多个模块登录到同一个地方)?由于它是一个开源模块,我不想修改它供我自己使用。

最佳答案

这是执行自己的日志记录并且没有 if __name__ == "__main__": block 的模块的普遍问题。当它们被导入时,您不能让它们遵循您的日志记录设置,因为它会被覆盖。如果您是这个开源项目的贡献者,我建议您提交补丁,否则只需将其报告为错误。修复它的方法是将上述 header 添加到 otherModule 的日志记录设置中。

关于跨开源模块的 Python 日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42654415/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com