如何更改 Flask 日志记录/调试屏幕输出格式?

Uro*_*nac 6 python logging werkzeug flask

我需要更改默认的 Flask/Werkzeug 调试输出。

我试过这个:

app = Flask(__name__)
app.config["TESTING"] = True
...
log = logging.getLogger("werkzeug")
log.disabled = True
Run Code Online (Sandbox Code Playgroud)

这正在发挥作用。输出被完全抑制,不再有如下行:

111.222.81.83 - - [26/Mar/2019 13:31:04] "POST /catchdata HTTP/1.1" 200 -
112.122.81.83 - - [26/Mar/2019 13:31:07] "POST /catchdata HTTP/1.1" 200 -
Run Code Online (Sandbox Code Playgroud)

哪个好!

然后,我添加了这行代码:

@app.route("/catchdata", methods=["POST"])
def catchdata():
    app.logger.info("In Catch")
    ...
Run Code Online (Sandbox Code Playgroud)

这就是我所得到的:

--------------------------------------------------------------------------------
INFO in __init__ [/srv/www/wsgi/Flask/service_py3/app/srv/__init__.py:438]:
In Catch
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
INFO in __init__ [/srv/www/wsgi/Flask/service_py3/app/srv/__init__.py:438]:
In Catch
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
INFO in __init__ [/srv/www/wsgi/Flask/service_py3/app/srv/__init__.py:438]:
In Catch
--------------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

如何更改默认格式以仅获取:

In Catch
In Catch
In Catch
Run Code Online (Sandbox Code Playgroud)

我不需要记录到文件。仅屏幕。谢谢你!

shm*_*mee 5

Flask 使用标准 Python 日志记录对象,其默认配置由 StreamHandler 和简单的 Formatter 组成。

如果需要自定义日志记录设置,Flask 日志记录文档引用了使用 Python 的示例logging.config.dictConfig,并建议在程序中尽快进行自定义设置:

当您想要为您的项目配置日志记录时,您应该在程序启动时尽快执行此操作。如果在app.logger配置日志记录之前访问,它将添加一个默认处理程序。如果可能,请在创建应用程序对象之前配置日志记录

如果您只想更改默认处理程序的输出格式,您可以简单地设置一个新的格式化程序,并使用所需的格式对其进行初始化:

import logging
from flask import Flask, logging as flog

app = Flask(__name__)

@app.route("/")
def random_name():
    app.logger.info("default flask logging format")
    flog.default_handler.setFormatter(logging.Formatter("%(message)s"))
    app.logger.info("message-only custom format")
    return "random value"
Run Code Online (Sandbox Code Playgroud)

产生以下输出

[2019-03-26 14:42:06,511] INFO in main: default flask logging format
message-only custom format
Run Code Online (Sandbox Code Playgroud)

Python 3 日志记录文档

编辑
事实证明,Flask 的日志记录设置在这次提交中发生了显着变化,似乎已在 1.0 版本中结束,引入了default_handler.
对于旧版本,您可以使用以下解决方案:

app.logger.handlers[0].setFormatter(logging.Formatter("%(message)s"))
Run Code Online (Sandbox Code Playgroud)

我想指出,这种方法使用handlers本机对象上未记录的属性Logger。虽然它没有被定义为私有的,但我仍然会谨慎地在生产代码中使用它。
此解决方案还依赖于 StreamHandler 作为第一个添加到记录器的处理程序。

无论如何,如我链接的 Flask 文档中所述,干净、专用的日志记录设置应该是首选方法。