🐍

Python アプリケーションのログを Google Cloud Logging に出力する

2024/02/16に公開

はじめに

今回は、Google Cloud にデプロイした Python アプリケーションのログを Google Cloud Logging に出力する方法をまとめます。公式ドキュメントにも説明があるので、ご一読ください。

https://cloud.google.com/logging/docs/setup/python?hl=ja

Google Cloud Logging にログ出力する

書き方

Python 向けの google-cloud-logging ライブラリの最新バージョンを使用します。

requirements.txt
google-cloud-logging

設定方法はとても簡単です。google.cloud.logging をインポートし、setup_logging メソッドで Cloud Logging ハンドラを Python 標準ライブラリの logging モジュールに接続する設定をアプリケーションのどこか1箇所に追加するだけです。Django アプリの場合は、settings.py に追加すれば、その他のソースコードでは標準ライブラリの logging をインポートするだけで OK です。

main.py
import logging
import google.cloud.logging

# Cloud Loggingハンドラを標準loggingモジュールに接続する
log_client = google.cloud.logging.Client()
log_client.setup_logging()

logging.error('ERROR')
logging.warning('WARNING')
logging.info('INFO')
logging.debug('DEBUG')

上記のコードを Cloud Functions (ランタイム Python 3.12) で実行すると、Cloud Logging のコンソール画面に以下のようにログが表示されました。

よく見ると、DEBUG レベルのログが表示されていません。ドキュメントにも記載されていますが、デフォルトでは INFO レベル以上のログしか Cloud Logging に送信されません。

出力するログのレベルを指定する

logging.LoggersetLevel メソッドで扱うレベルのしきい値を設定することができます。以下は DEBUG レベル以上のログを表示したい場合の例です。

main.py
import google.cloud.logging
import logging

log_client = google.cloud.logging.Client()
log_client.setup_logging()

# DEBUGレベルのログをCLoud Loggingで表示する
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)

logger.error('ERROR')
logger.warning('WARNING')
logger.info('INFO')
logger.debug('DEBUG')

DEBUG レベルのログも表示されているのが確認できますね。

Google Cloud Logging の良い点

トグルを開くと sourceLocation というフィールドがありますが、このログを出力した関数名とファイル名、行数を要素として持っています。これらの情報はエラーログが出た時の原因調査には必須ですが、特にフォーマットを指定しなくてもデフォルトで表示してくれるところが便利でした。ログが構造化されていると、テキストペイロードを短くシンプルにできるので、確認しやすいログになります。

まとめ

今回は、Python アプリケーションのログを Google Cloud Logging に出力する方法をまとめました。ログレベルをきちんと付与すると、ログ監視が楽になるので、使っていない方は是非試していただきたいです。

レスキューナウテックブログ

Discussion