禁用针对特定请求/ URL /终结点的gunicorn登录

时间:2019-08-08 16:00:59

标签: python logging flask gunicorn

最近,存在一个问题,即如何针对特定端点(Skip Flask logging for one endpoint?)禁用Python Flask中的日志记录。

例如,对于/healthcheck来说,这是有意义的,您不想使日志混乱。

我为Flask解决了此问题,但是当使用Gunicorn运行Flask时,我的解决方案不再起作用。

如何使用Gunicorn实现此目标?我想要常规的日志记录行为,但没有/healthcheck端点的任何日志。

2 个答案:

答案 0 :(得分:4)

我知道了-您需要覆盖pre_request钩子。

这可以如下进行:

您需要创建一个配置文件,例如config/gunicorn.py

def pre_request(worker, req):
    if req.path == '/healthcheck':
        return
    worker.log.debug("%s %s" % (req.method, req.path))

然后在启动gunicorn时使用它: gunicorn server:app -c config/gunicorn.py

答案 1 :(得分:0)

pre_request钩对我不起作用。我使用来自https://stackoverflow.com/a/52455408/2339067的答案来创建以下gunicorn.conf.py文件:

import logging
from gunicorn import glogging


class CustomGunicornLogger(glogging.Logger):

    def setup(self, cfg):
        super().setup(cfg)

        # Add filters to Gunicorn logger
        logger = logging.getLogger("gunicorn.access")
        logger.addFilter(HealthCheckFilter())

class HealthCheckFilter(logging.Filter):
    def filter(self, record):
        return 'GET /healthcheck' not in record.getMessage()

accesslog = '-'
logger_class = CustomGunicornLogger