我正在开发一个具有日志功能的python脚本。我已经阅读了logging模块的文档以及许多堆栈溢出帖子,并且我学到了很多,但我仍然很难理解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')通过这个设置,我有两个问题:
logging.basicConfig(),但是我无法让它写入日志文件(我可能做错了什么)。但是我想知道创建日志实例(logger = logging.getLogger(__name__))和直接调用日志函数(logging.info(msg))之间的区别。otherModule.py写入在我的主模块中定义的同一个日志文件,以及Python如何知道如何使用在myModule.py中创建的记录器(我试图通过查看Python来找出答案,但它们大多只是说您可以跨多个模块登录到相同的位置)?因为它是一个开放源码模块,所以我不想自己修改它。发布于 2017-03-07 19:15:06
这是做自己的日志记录并且没有if __name__ == "__main__":块的模块的一般问题。当它们被导入时,您不能让它们遵循您的日志设置,因为它会被覆盖。如果您是这个开源项目的贡献者,我建议您提交一个修补程序,否则只需将其报告为bug即可。修复它的方法是将前面提到的头添加到otherModule中的日志记录设置中。
https://stackoverflow.com/questions/42654415
复制相似问题