wiz*_*owl 8 python flask gunicorn
我正在使用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)
Run Code Online (Sandbox Code Playgroud)
这按预期工作.传递给的任何消息app.logger都在json中正确格式化.
但是,应用程序也会自动记录所有请求.此信息显示在标准输出中,如下所示:
127.0.0.1 - - [19/Jun/2015 12:22:03] "GET /portal/ HTTP/1.1" 200 -
Run Code Online (Sandbox Code Playgroud)
我希望这些信息也可以在json中格式化.我一直在寻找负责创建此输出但没有成功的记录器/代码.
这个输出在哪里生成?是否有机制来更改此记录信息的格式?
app.logger首次使用该属性时,Flask会设置一些日志处理程序:
DEBUG并在app.debug为真时进行过滤的调试记录器。ERROR。您可以运行以下命令再次自己删除这些处理程序:
app.logger.handlers[:] = []
Run Code Online (Sandbox Code Playgroud)
但是,您看到的日志行不是Flask记录的,而是WSGI服务器记录的。内置的Werkzeug服务器(在使用时使用app.run())和其他各种WSGI服务器都可以做到这一点。例如,Gunicorn使用默认的Python记录器来记录访问。
内置的WSGI服务器绝对不能在生产环境中使用(它无法很好地扩展,并且无法与恶意攻击者抗争)。
对于Gunicorn,您可以禁用日志传播以使日志分开:
logging.getLogger('gunicorn').propagate = False
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3172 次 |
| 最近记录: |