Skip to content

Gunicorn Integration

Basic Setup

Use the Logly logging hook for Gunicorn:

python
# gunicorn.conf.py
from logly import logger

def on_starting(server):
    """Called just before the master process is initialized."""
    logger.add("gunicorn.log", level="INFO")

def post_fork(server, worker):
    """Called just after a worker has been forked."""
    logger.info("Worker spawned (pid: {})", worker.pid)

Custom Error Logging

python
# gunicorn.conf.py
from logly import logger

def post_worker_init(worker):
    """Called just after a worker has been initialized."""
    logger.add(
        f"worker-{worker.pid}.log",
        level="DEBUG",
        rotation="100 MB",
        retention="7 days",
    )

def worker_exit(server, worker):
    """Called just after a worker has been exited."""
    logger.info("Worker exiting (pid: {})", worker.pid)
    logger.complete()

Configuration

bash
# Run Gunicorn with Logly config
gunicorn app:app -c gunicorn.conf.py --workers 4

TIP

Call logger.complete() in the worker_exit hook to ensure all enqueued messages are flushed before the worker terminates.

Released under the MIT License.