Recently, there was the question of how to disable logging in Python Flask for a specific endpoint (Skip Flask logging for one endpoint?).
This makes sense for example for /healthcheck
which you don't want to clutter your logs.
I solved this for Flask, but when running Flask using Gunicorn my solution doesn't work anymore.
How do I achieve this using Gunicorn? I want regular logging behavior, but not have any logs for the /healthcheck
endpoint.
The pre_request
hook wasn't working for me. I used the answer from https://stackoverflow.com/a/52455408/2339067 to create the following gunicorn.conf.py
file:
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
I figured it out - you need to override the pre_request
hook.
This can be done as follows:
You need to create a config file, e.g. config/gunicorn.py
:
def pre_request(worker, req):
if req.path == '/healthcheck':
return
worker.log.debug("%s %s" % (req.method, req.path))
And then use it when you start gunicorn:
gunicorn server:app -c config/gunicorn.py
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With