Python Flask错误记录不适用于HTTP处理程序

时间:2018-01-25 01:03:47

标签: python-3.x logging flask error-handling

所以我尝试过几种不同的方法。 我正在尝试使用烧瓶app.logger来保存带有MYSQL数据库的消息,而不使用SQLalchdb处理程序(我不使用SQLalch进行任何操作)

反正.... 当我使用带有文件处理程序的app.logger时,一切正常

当我在烧瓶外使用我的http处理程序,并设置烧瓶路线以捕获错误时,它也可以正常工作

但是当我使用app.logger并向其添加http处理程序时,它不起作用。 看看我的代码并告诉我你的想法

http_handler = logging.handlers.HTTPHandler(
'localhost:5000',
'/logs',
method='POST',
)
app.logger.setLevel(logging.DEBUG)
app.logger.addHandler(http_handler)

这是烧瓶路线:

@app.route('/logs' , methods = ["GET","POST"])
def logs():
print('caught it')
print(request.form)
return ""

这是我用来强制和错误的路线:

@app.route('/home', methods=['POST'])
def index():
[some code]
ender_template("index.html")

如前所述,如果我使用上面相同的HTTP处理程序设置一个新的记录器(不是烧瓶app.logger),它可以工作,所以我假设烧瓶路径设置正确。 同样如前所述,烧瓶app.logger将使用文件处理程序

非常感谢任何帮助

EDIT :: 最近被要求描述以下代码如何响应,认为它可能是每个试图帮助的人的好信息。

当我强制烧瓶出现错误时(将“render_template”更改为“ender_template” 我看到python shell中的错误,但它没有传递给路由。 此外,我强制错误烧瓶后不再允许我GET / POST任何东西,直到它重新启动。 我没有记录日志功能的任何异常或错误

2 个答案:

答案 0 :(得分:1)

这可以按预期工作:

from logging.handlers import HTTPHandler

http_handler = HTTPHandler('localhost:5000',
                           '/logs',
                           method='POST')

from flask import Flask, request
app = Flask(__name__)

@app.route('/logs', methods=['POST'])
def logs():
    import pdb;pdb.set_trace()

app.logger.addHandler(http_handler)
app.run(debug=True)

来自另一个终端:

curl --form hello=world localhost:5000/logs

来自 / logs 端点:

(pdb) print(request.form)
ImmutableMultiDict([('hello', u'world')])

答案 1 :(得分:0)

我能够解决这个问题..花了我几天,我有点尴尬。

所以这是交易。 Flask确实附带了自己的内置记录器(app.logger),可以添加句柄,将记录的数据存储在其他地方

问题是,您无法使用指向同一烧瓶应用的HTTP处理程序。 要解决此问题,请设置一个完全不同的烧瓶应用程序(也为其提供唯一的IP地址和/或端口号),并将http处理程序指向该应用程序。