generated at
Django + gunicorn のログ出力設定
shell
$ django-admin startproject apps

settings.py
LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'formatters': { 'standard': { 'format': ('%(levelname)s [%(asctime)s] %(name)s %(message)s'), }, 'verbose': { 'format': '%(levelname)s %(asctime)s %(name)s %(process)d %(thread)d %(message)s' }, }, 'filters': { 'require_debug_false': { '()': 'django.utils.log.RequireDebugFalse' }, 'require_debug_true': { '()': 'django.utils.log.RequireDebugTrue' }, }, 'handlers': { 'debug-console': { 'level': 'DEBUG', 'filters': ['require_debug_true'], # settings.DEBUG=Falseなら全て破棄 'class': 'logging.StreamHandler', 'formatter': 'verbose' }, 'prod-console': { 'level': 'INFO', 'filters': ['require_debug_false'], # settings.DEBUG=Trueなら全て破棄 'class': 'logging.StreamHandler', 'formatter': 'standard' } }, 'loggers': { '': { # 'root' の代わり。全てキャッチする 'handlers': ['prod-console', 'debug-console'], 'level': 'NOTSET', 'propagate': False }, 'django': { 'handlers': ['prod-console', 'debug-console'], 'level': 'ERROR', # Djangoモジュール由来のログをERROR以上のみに制限 'propagate': False }, 'django.request': { 'handlers': ['prod-console', 'debug-console'], 'level': 'ERROR', # Djangoモジュール由来のログをERROR以上のみに制限 'propagate': False, }, 'django.db.backends': { 'handlers': ['prod-console', 'debug-console'], 'level': 'DEBUG', # DBに発行するSQLログを出力(実際の出力はhandlerの方で制御する) 'propagate': False }, } }
Djangoのdjango.db.backendsのログ出力を有効化する

アプリレベルでリクエスト処理開始と終了をログ出力したい場合これを追加
apps/apps/middleware.py
python
MIDDLEWARE = [ ... 'apps.middleware.request_log_middleware', ]

python
import logging import uuid logger = logging.getLogger(__name__) def request_log_middleware(get_response): def middleware(request): endpoint = request.get_full_path() request_id = str(uuid.uuid4()) # requestにIDがあればそっちがいいな logger.debug(f'start reqid={request_id} endpoint={endpoint}') response = get_response(request) logger.debug(f'end reqid={request_id} endpoint={endpoint} status={response.status_code}') # 処理にかかった時刻情報もあるとよいかも return response return middleware

shell
$ gunicorn \ --workers 2 \ --bind 127.0.0.1:8000 \ --access-logfile - \ # gunicorn自体にアクセスログを出力させたい場合 --capture-output \ # Pythonからのログ出力をstdout/stderrにしている場合、必要 --log-level debug \ # gunicorn自体のデバッグログを出力させたい場合 apps.wsgi # Djangoのwsgiモジュールパス

--capture-output オプションは gunicorn 19.6 で追加
--error-logfile オプションは gunicorn 19.2 以降デフォルトで - が設定される