📝
【GCP】PythonのCloud Loggingでログのフォーマットを設定する
やり方
import logging
import google.cloud.logging
from google.cloud.logging.handlers import CloudLoggingHandler, setup_logging
# クライアントのインスタンスを生成
client = google.cloud.logging.Client()
# GCPのロギング ハンドラを作成
handler = CloudLoggingHandler(client)
# GCPのロギングシステムの設定
logging_format = '[%(levelname)s, %(name)s], %(message)s'
formatter = logging.Formatter(logging_format)
handler.setFormatter(formatter)
setup_logging(handler, log_level=logging.INFO) # デフォルトはINFO
将来的には対応してくれる?
Pythonのロギング機能では,basicConfig(format=任意のフォーマット)
でログのフォーマットの設定ができるが,フォーマットの設定はv2.1.1のPython用Cloud Logging APIでは反映されなかった.
Gitのissueを見ると,v2.5.0で対応してくれるのかな.
参考:Support for logging formatter class
Cloud LoggingのハンドラはPython Loggingのハンドラを継承しているクラスなので,基本的にPython Loggingのハンドラに設定できるものはCloud Loggingのハンドラでも設定できると思っている.
リソースの設定
Cloud Loggingではリソースを設定しない場合,ログはGCPのロギングのglobal
に出力される.
もしリソースをCloud RUNのリビジョン
にする場合は
res = google.cloud.logging.Resource(
type="cloud_run_revision",
labels={
"project_id": PROJECT_ID, # なくても良い
"service_name": SURVICE_NAME, # なくても良い
"revision_name": REVISION_NAME, # なくても良い
"location": LOCATION, # なくても良い
"configuration_name": CONFIGURATIONS_NAME, # なくても良い
},
)
でリソースの設定をしたあと,
handler = CloudLoggingHandler(client, resource=res)
とハンドラを作成するときにリソースを渡してあげれば良い.
リソースのlabels
の設定はしなくても良いが,プロジェクトごと,さらにサービスごとに出力先を絞りたい場合に設定すれば良いみたい.
labels
の項目はリソースのタイプごとに異なるが,それは公式のドキュメントで確認することができる.
公式ドキュメント:Monitored resources and services
Discussion