所以我尝试过几种不同的方法。 我正在尝试使用烧瓶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任何东西,直到它重新启动。 我没有记录日志功能的任何异常或错误
答案 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处理程序指向该应用程序。