Python中gunicorn的logging与程序自身的logging有什么区别和联系?

看到 gunicorn 的 settings 里有 accesslog 和 errorlog, 然后一个 python 程序也可以有自己的 logging,这两个 logging 会有冲突?

目前自己猜测的是: 如果 python 程序自己的 log 写到标准输出,会被 gunicorn 捕获。如果 python 程序自己写到文件里,就不会被 gunicorn 捕获。

请问老司机们,这两种 logging 是否是猜想的那样?或者说下自己的 logging 实践

两个参考的文档:

  1. http://docs.jinkan.org/docs/flask/errorhandling.html
  2. http://docs.gunicorn.org/en/stable/settings.html#logging

Python中gunicorn的logging与程序自身的logging有什么区别和联系?

2 回复

Gunicorn的logging和你自己程序的logging是两个不同的系统,但可以协同工作。

Gunicorn的logging主要处理HTTP请求/响应层面的日志(比如访问日志),它有自己的配置方式(命令行参数或配置文件)。而你的程序logging是记录应用逻辑、业务处理等内部信息。

关键联系在于:Gunicorn作为WSGI服务器,会加载你的应用。如果你在应用初始化时设置了logging配置(比如在__main__app.py中调用logging.basicConfig()),Gunicorn worker进程会继承这个配置。但要注意,Gunicorn的主进程(master)不会加载你的应用代码,所以主进程的日志不受你程序配置的影响。

一个常见的做法是让Gunicorn处理访问日志,同时在应用内部使用标准的Python logging模块记录业务日志,两者可以输出到同一个文件或不同的地方。

简单说:Gunicorn管HTTP日志,你的程序管业务日志,配置好可以一起用。


可以看一下我发的帖子,里面有 gunicorn logging 的配置 https://www.v2ex.com/t/418542 ,可我的问题也没解决

回到顶部