针对特定请求/URL/端点禁用登录 gunicorn
Disable logging in gunicorn for a specific request / URL / endpoint
最近,有一个问题是如何在 Python Flask 中禁用特定端点 (Skip Flask logging for one endpoint?) 的登录。
这对于 /healthcheck
来说是有意义的,您不想让您的日志混乱。
我为 Flask 解决了这个问题,但是当 运行 Flask 使用 Gunicorn 我的解决方案不再有效。
如何使用 Gunicorn 实现此目的?我想要常规的日志记录行为,但没有 /healthcheck
端点的任何日志。
我明白了 - 你需要覆盖 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
pre_request
挂钩对我不起作用。我使用 的答案创建了以下 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
最近,有一个问题是如何在 Python Flask 中禁用特定端点 (Skip Flask logging for one endpoint?) 的登录。
这对于 /healthcheck
来说是有意义的,您不想让您的日志混乱。
我为 Flask 解决了这个问题,但是当 运行 Flask 使用 Gunicorn 我的解决方案不再有效。
如何使用 Gunicorn 实现此目的?我想要常规的日志记录行为,但没有 /healthcheck
端点的任何日志。
我明白了 - 你需要覆盖 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
pre_request
挂钩对我不起作用。我使用 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