【问题标题】:Python Flask Error Logging wont work with HTTP HandlerPython Flask 错误日志不能与 HTTP 处理程序一起使用
【发布时间】:2018-07-04 04:23:51
【问题描述】:

所以我尝试了几种不同的方法。 我正在尝试使用烧瓶 app.logger 在不使用 SQLalchdb 处理程序的情况下使用 MYSQL 数据库保存消息(我不使用 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),它可以工作,所以我假设烧瓶路由设置正确。 同样如前所述,flask app.logger 将与文件处理程序一起使用

非常感谢任何帮助

编辑:: 最近被要求描述以下代码如何响应,认为这对每个试图提供帮助的人来说都是很好的信息。

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

【问题讨论】:

  • 如果从/logs 路由的方法列表中删除“GET”会怎样?还是在处理程序中指定 method='GET'?
  • 我尝试从方法列表中删除 GET 并更改处理程序中的方法。没用。不过谢谢!
  • 仍在寻求有关此问题的帮助

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


【解决方案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')])

【讨论】:

  • 我试过这个,添加了除了“debug=True”之外的所有东西也许我应该更具体..只要我在测试脚本时不使用 app.logger,http_handler 就可以工作,通过使用 curl 命令,您也没有使用 app.logger。为了使用 app.logger 进行测试,您需要在实际的烧瓶应用程序本身中出错。例如: @app.route('/home', methods=['POST']) def index(): ender_template("index.html") 到你的烧瓶应用程序,然后访问 localhost:500/home 你实际上是触发烧瓶记录器。
  • 会将编辑添加到您的代码中,以便您可以再次使用它?谢谢!
【解决方案2】:

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

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

问题是,您不能使用指向同一个烧瓶应用程序的 HTTP 处理程序。 为了解决这个问题,设置一个完全不同的烧瓶应用程序,(也给它一个唯一的 IP 地址和/或端口号)并将 http 处理程序指向该应用程序。

【讨论】:

    猜你喜欢
    • 2019-06-20
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-17
    • 1970-01-01
    相关资源
    最近更新 更多