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

问题描述 投票:2回答:1

我需要更改默认的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

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

python logging flask werkzeug
1个回答
0
投票

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

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

如果要为项目配置日志记录,则应在程序启动时尽快执行。如果在配置日志记录之前访问app.logger,它将添加默认处理程序。如果可能,在创建应用程序对象之前配置日志记录

如果您只想更改默认处理程序的输出格式,您只需设置一个新的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属性。虽然它没有被定义为私有,但我仍然需要在生产代码中使用它。 此解决方案还依赖于StreamHandler作为添加到记录器的第一个。

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

© www.soinside.com 2019 - 2024. All rights reserved.