首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python Flask日志记录问题

Python Flask日志记录问题
EN

Stack Overflow用户
提问于 2019-01-10 10:40:09
回答 1查看 369关注 0票数 1

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

这是我的简单的flask应用程序,我写这篇文章是为了解释我遇到的问题,并且已经被困了一段时间,试图弄清楚python-logging & flask发生了什么。

代码语言:javascript
复制
# 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内置的日志处理程序,但看看它的实现,它会附加到日志记录模块本身。因此,整个事情仍然没有意义。这里的任何帮助或指导都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2019-01-10 14:28:38

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

代码语言:javascript
复制
# 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生成的典型日志记录输出。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54121257

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档