gpt4 book ai didi

跨多个模块的 Python 日志记录

转载 作者:太空狗 更新时间:2023-10-29 21:16:47 26 4
gpt4 key购买 nike

我正在尝试将日志记录(添加到控制台而不是文件)到我已经处理了一段时间的代码中。仔细阅读后,我有一个我认为应该可行的模式,但我不太确定哪里出错了。

我有以下三个文件(显然是经过简化的):

Controller .py

import my_module    
import logging
from setup_log import configure_log

def main():
logger = configure_log(logging.DEBUG, __name__)
logger.info('Started logging')
my_module.main()

if __name__ == "__main__":
main()

设置日志.py

import logging

def configure_log(level=None, name=None):
logger = logging.getLogger(name)
logger.setLevel(level)
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.DEBUG)
chFormatter = logging.Formatter('%(levelname)s - %(filename)s - Line: %(lineno)d - %(message)s')
console_handler.setFormatter(chFormatter)
logger.addHandler(console_handler)
return logger

我的模块.py

import logging

def main():
logger = logging.getLogger(__name__)
logger.info("Starting my_module")
print "Something"

if __name__ == "__main__":
main()

当我运行它们时,只有第一次调用日志记录时才会向控制台生成输出 -“已开始记录”。第二次调用日志 - 'Starting my module' 刚刚过去。

我误解/破坏了什么?

最佳答案

根据documentation看起来您可能会像这样进行更简单的设置:

If your program consists of multiple modules, here’s an example of how you could organize logging in it:

# myapp.py
import logging
import mylib

def main():
logging.basicConfig(filename='myapp.log', level=logging.INFO)
logging.info('Started')
mylib.do_something()
logging.info('Finished')

if __name__ == '__main__':
main()

# mylib.py
import logging

def do_something():
logging.info('Doing something')

If you run myapp.py, you should see this in myapp.log:

INFO:root:Started
INFO:root:Doing something
INFO:root:Finished

看起来您在模块内对 logger = logging.getLogger(__name__) 的调用正在创建一个单独的轨道(级别为 NOTSET 但与导致日志条目)

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

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