我正在使用具有日志记录功能的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')
通过此设置,我有两个问题:
logging.basicConfig()
,但我无法将其写入日志文件(我可能做错了)。但是我想知道创建日志记录实例(logger = logging.getLogger(__name__)
)和直接调用日志记录函数(logging.info(msg)
)之间的区别。otherModule.py
写入我的主模块中定义的相同日志文件,以及Python如何知道使用myModule.py
中创建的记录器(我试图找到答案)通过查看Python文档,但他们大多只是说你可以跨多个模块登录到同一个地方)?由于它是一个开源模块,我宁愿不修改它供我自己使用。答案 0 :(得分:1)
这是模块执行自己的日志记录并且没有assert findFirstByKey(json, 'formField')?.name == "CUSTOM_347"
阻止的一般问题。当它们被导入时,您无法使它们遵循您的日志记录设置,因为它会被覆盖。如果您是这个开源项目的贡献者,我建议您提交补丁,否则只需将其报告为错误。修复它的方法是将上述标题添加到otherModule中的日志记录设置。