PythonのloggingモジュールからStackdriverにログを流す手順はドキュメントに書かれている。
Setting Up Stackdriver Logging for Python | Stackdriver Logging | Google Cloud
Djangoフレームワークを使っている場合は、Djangoのロギング設定を考慮する必要がある。
ちゃんと設定しておくと、logging.infoやlogging.errorで出力したレベルの情報をStackdriver上でも付与された状態でログを見れる。
Python 3.7、Django 2.1.4、google-cloud-logging 1.9.1で試した。
Djangoの設定
あらかじめ、対象のプロジェクトでStackdriver LoggingのAPIを有効にしておく。
また、クライアントライブラリ( google-cloud-logging
) をインストールしておく。
Djangoの settings.py
に追記する想定。
from google.cloud import logging as google_cloud_logging log_client = google_cloud_logging.Client() LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'stackdriver_logging': { 'class': 'google.cloud.logging.handlers.AppEngineHandler', 'client': log_client, }, }, 'loggers': { 'django': { 'handlers': ['stackdriver_logging'], 'level': 'INFO', 'propagate': True, }, 'django.request': { 'handlers': ['stackdriver_logging'], 'level': 'ERROR', }, }, 'root': { 'handlers': ['stackdriver_logging'], 'level': 'INFO', } }
- AppEngineのデフォルトのサービスアカウントで書き込みは可能なので認証の設定は不要
- ドキュメントにある
setup_logging()
は、呼ばないでおく(Django側でロギングのセットアップが走るので不要) - rootロガーの設定は好み
- AppEngineを使っている場合のハンドラは、
google.cloud.logging.handlers.AppEngineHandler
を使っておくとFlexible/Standardどちらでも都合が良いらしい - gunicornのログも流そうとすると、いろいろややこしいのでDjangoのみにしてある