Skip to content

ロギング

Gunicorn で FastAPI アプリを動かしてる時のログ出力設定。

Info

Rocky Linux 9 上で FastAPI アプリを動かす前提で。


Gunicorn のログ設定例

デプロイ で書いた gunicorn_config.py にログ設定を追記する。 logs フォルダにログを保存していく。アクセスログはデフォルトではタイムスタンプがつかないので、 post_worker_init 関数でカスタムしてる。

# gunicorn_config.py
import logging
import multiprocessing
from pathlib import Path

Path("logs").mkdir(exist_ok=True)

worker_class = "uvicorn_worker.UvicornWorker"
workers = multiprocessing.cpu_count() * 2 + 1
bind = "0.0.0.0:8000"

accesslog = "logs/access.log"
errorlog = "logs/error.log"


def post_worker_init(worker):
    access_formatter = logging.Formatter(
        "%(asctime)s - %(levelname)s - %(message)s",
        datefmt="%Y-%m-%d %H:%M:%S %z",
    )

    for logger_name in ("gunicorn.access", "uvicorn.access"):
        logger = logging.getLogger(logger_name)
        for handler in logger.handlers:
            handler.setFormatter(access_formatter)

ログローテーション設定例

$ cat /etc/logrotate.d/fastapi-gunicorn 
/home/alice/my-fastapi-app/logs/access.log /home/alice/my-fastapi-app/logs/error.log {
    weekly
    rotate 52
    missingok
    notifempty
    compress
    delaycompress
    copytruncate
}