gunicorn日志--access-logformat不起作用

使用gunicorn+supervisor启动fastapi服务,命令如下:

gunicorn main:app --workers 2 --worker-class uvicorn.workers.UvicornWorker --bind 127.0.0.1:8000 --access-logfile '-'

其中access log记录到的内容如下:

176.123.7.11:0 - "GET / HTTP/1.0" 200 

只记录访问者的IP,没有记录访问时间,不利于后续debug,所以想着配置日志格式记录request time。查看文档docs.gunicorn.org后,将命令修改如下:

gunicorn main:app --workers 1 --worker-class uvicorn.workers.UvicornWorker --bind 127.0.0.1:9800 --access-logfile '-' --access-logformat "%(h)s %(l)s %(u)s %(t)s  %(s)s %(b)s"

 发现不起作用,改成config file也还是不起作用:

# gunicorn.conf.py
access_log_format = '{"request": "%(r)s", "http_status_code": "%(s)s", "http_request_url": "%(U)s", "http_query_string": "%(q)s", "http_verb": "%(m)s", "http_version": "%(H)s"}'
gunicorn main:app --workers 1 --worker-class uvicorn.workers.UvicornWorker --bind 127.0.0.1:9800 --access-logfile '-' --config gunicorn.conf.py

又试了--log-config的方式,也还是不起作用。

最后,搜了GitHub和stackoverflow才找到原因:https://github.com/encode/uvicorn/issues/527

解决方案是:修改gunicorn源码

vi xxx/site-packages/gunicorn/glogging.py  # 修改这个文件
- access_fmt = r"%(message)s"
+ access_fmt = r"%(asctime)s %(message)s"

总之,这是uvicorn的问题,在bug被修复之前,修改gunicorn源码是比较简单的解决方法。 

你可能感兴趣的:(gunicorn)