gpt4 book ai didi

Python Flask 日志记录问题

转载 作者:太空宇宙 更新时间:2023-11-03 21:22:37 27 4
gpt4 key购买 nike

我即将为一些非常琐碎的事情编写一个 flask 应用程序..并且我在日志记录实践中遇到了障碍。

这是我的简单 Flask 应用程序,我写这个是为了解释我遇到的问题,并且有一段时间一直试图弄清楚 python-logging 和 Flask 发生了什么。

# standard
from flask import Flask
from flask_restful import Api
import logging
import json

# logging config
log_fmt = "%(asctime)s %(levelname)s %(process)d %(filename)s %(funcName)s %(message)s"
logging.basicConfig(
filename="test.log",
filemode="w",
format=log_fmt,
level=logging.DEBUG
)

# create an object of flask (flask is a web framework)
app = Flask(__name__)
api = Api(app)


# health check /
@app.route("/", methods=['GET'])
def default():
logging.debug("/ request received")
out_dict = {
"hello": "world"
}
logging.debug("/ response" + str(out_dict))
return json.dumps(out_dict)


# main function, entry point
if __name__ == "__main__":

# invokes src and runs the application
logging.debug("starting")
# COMMENTING below - gets me the log file! Whats happening with flask & logging?
app.run(host="0.0.0.0", port=7001, debug=True)
logging.debug("stopping")

现在,这是我需要日志记录时通常采用的模式。但是,当我将这种日志记录模式与 app.run(..) 一起应用时,日志文件永远不会被创建。我无法弄清楚为什么会发生这种情况。

但相反..如果我评论app.run(..),日志文件将使用我已有的相应调试日志创建。

我一直在努力理解这一点 - 我确实登陆了 flask 内置日志处理程序,但看看它的实现,它附加到日志记录模块本身。所以整件事仍然没有意义。此处的任何帮助或指导将不胜感激。

最佳答案

使用logging.basicConfig做出了一些假设,这些假设在调用 app.run(...) 时可能会被撤销,因为 Flask 也使用日志记录模块来设置日志输出,正如您所指出的。但是,如果您手动设置文件处理程序并将其附加到根记录器,如下所示(即将 #logging config 部分替换为):

# logging config
log_fmt = "%(asctime)s %(levelname)s %(process)d %(filename)s %(funcName)s %(message)s"
handler = logging.FileHandler('test.log')
handler.setFormatter(logging.Formatter(log_fmt))
root_logger = logging.getLogger()
root_logger.addHandler(handler)
root_logger.setLevel(logging.DEBUG)

这将设置日志记录处理程序,并将格式化程序设置为您指定的 log_fmt,然后将该处理程序附加到 logging.getLogger() 返回的根记录器。 。运行应用程序,给它一些请求并退出,您应该看到当前工作目录中的 test.log 中显示适当的条目,同时也会显示由 Flask 生成的一些典型日志输出。

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

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