在json中格式化Flask应用程序日志

我正在使用Python / Flask应用程序,并尝试在json中将日志格式化(按行)。

使用python-json-logger软件包,我修改了app.logger的格式化程序,如下所示:

from pythonjsonlogger import jsonlogger
formatter = jsonlogger.JsonFormatter(
    '%(asctime) %(levelname) %(module) %(funcName) %(lineno) %(message)')
app.logger.handlers[0].setFormatter(formatter)

这按预期工作。 传递给app.logger任何消息都在json中正确格式化。

但是,应用程序也会自动记录所有请求。 这些信息在标准输出中显示如下:

127.0.0.1 - - [19/Jun/2015 12:22:03] "GET /portal/ HTTP/1.1" 200 -

我希望将这些信息在json中格式化。 我一直在寻找负责创建这个输出没有成功的记录器/代码。

这个输出在哪里产生? 机制是否改变这个记录信息的格式?


当您第一次使用app.logger属性时,Flask会设置一些日志处理程序:

  • 一个调试记录器,它被设置为日志级别DEBUG并在app.debug上过滤为true。
  • 生产记录器设置为ERROR
  • 您可以自己再次删除这些处理程序,方法是运行:

    app.logger.handlers[:] = []
    

    但是,您看到的日志行不是由Flask记录的,而是由WSGI服务器记录的。 内置的Werkzeug服务器(在使用app.run()时使用)以及其他各种WSGI服务器都可以执行此操作。 例如Gunicorn使用默认的Python记录器来记录访问。

    内置的WSGI服务器不应该用于生产(它不会很好地扩展,并且不会对恶意攻击者进行战斗)。

    对于Gunicorn,您可以禁用日志传播以保持日志分离:

    logging.getLogger('gunicorn').propagate = False
    
    链接地址: http://www.djcxy.com/p/27099.html

    上一篇: Formatting Flask app logs in json

    下一篇: Fixing future problematic code?