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

标签 python logging flask werkzeug

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

我试过这个:

app = Flask(__name__)
app.config["TESTING"] = True
...
log = logging.getLogger("werkzeug")
log.disabled = True

这很有效。输出被完全抑制,不再有类似的行:
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 -

哪个好!

然后,我包含了这行代码:
@app.route("/catchdata", methods=["POST"])
def catchdata():
    app.logger.info("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
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
INFO in __init__ [/srv/www/wsgi/Flask/service_py3/app/srv/__init__.py:438]:
In Catch
--------------------------------------------------------------------------------

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

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

最佳答案

Flask 使用标准 Python 日志记录对象,其默认配置由带有简单格式化程序的 StreamHandler 组成。

如果需要自定义日志设置,Flask logging documentation引用 example使用 Python 的 logging.config.dictConfig 并建议尽快在程序中进行自定义设置:

When you want to configure logging for your project, you should do it as soon as possible when the program starts. If app.logger is accessed before logging is configured, it will add a default handler. If possible, configure logging before creating the application object.



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

产生以下输出
[2019-03-26 14:42:06,511] INFO in main: default flask logging format
message-only custom format

Python 3 logging docs

编辑
事实证明,Flask 的日志记录设置因 this commit 而发生了显着变化。这似乎已经在 1.0 版本中结束,引入了 default_handler .对于旧版本,您可以回退到以下解决方案:
app.logger.handlers[0].setFormatter(logging.Formatter("%(message)s"))

我想指出,这种方法使用了未记录的 handlers原生属性 Logger对象。虽然它没有被定义为私有(private)的,但我仍然对在生产代码中使用它持谨慎态度。这个解决方案还依赖于 StreamHandler 作为第一个添加到记录器的。

在任何情况下,我链接的 Flask 文档中概述的干净、专用的日志记录设置应该是首选方法。

关于python - 如何更改 Flask 日志记录/调试屏幕输出格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55357513/

相关文章:

python - 检查一个列表中的任何元素是否在另一个列表中

python - 在 Python 2.7 中应用折扣并显示折扣率

Java - 找不到 Logger 类

python - IPython:将 Python 脚本的输出重定向到文件(如 bash >)

python - 如何使用 shell 测试 Django 模型

Java 记录器控制台流重复输出

sql-server - SSIS - 控制发送到 SSIS 目录的错误日志

css - 将 CSS 文件从 React index.html 链接到 Flask 后端

javascript - 通过对 Flask 的函数调用更新值

python - Flask URL 变量类型无?