概要
Pythonから、Google Cloud のLoggingにログを出力する方法です。
手順
GCP内(Compute Engineなど)からのログ出力
Compute Engineなど、暗黙的に認証が行われる環境であれば、ログ出力は簡単です。
まず、モジュールを pip install google-cloud-logging
でインストールした後、以下のコードを実行します。
from google.cloud.logging import Client
logging_client = Client()
logger = logging_client.logger('mylogname')
logger.log_text("Hello, world!")
Pythonのloggingモジュールでログ出力するには専用のハンドラーが使えます。
import logging
from google.cloud.logging import Client
from google.cloud.logging.handlers import CloudLoggingHandler
logging_client = Client()
handler = CloudLoggingHandler(logging_client, name='mylogname')
cloud_logger = logging.getLogger()
cloud_logger.setLevel(logging.INFO)
cloud_logger.addHandler(handler)
cloud_logger.error('Hello, world!')
細かいことですが、loggingから出力した場合はjsonPayloadで出力されます。textPayloadで出力することはできないと思われます。textPayloadが必要な場合は、最初の例のように、loggingモジュールを介さず直接 log_text()
で出力する必要があります。
GCP外からのログ出力
GCP外からは明示的に認証を行う必要があります。
今回はサービスアカウントを使って認証させます。(多少手順は異なりますが、通常のユーザーアカウントを使ってもできるはずです)
クラウド側の設定
IAMでサービスアカウントを作成して、Logs Writerの権限を付与します。
作成したアカウントのキーをダウンロードしておきます。以下の例では service-account.json
とします。
ローカル(Python実行環境)の設定
上記のコードに少し認証の手順を追加することで、ログを出力できます。
import logging
from google.cloud.logging import Client
from google.cloud.logging.handlers import CloudLoggingHandler
from google.oauth2 import service_account
credentials = service_account.Credentials.from_service_account_file('service-account.json')
logging_client = Client(project='my-project-id', credentials=credentials)
handler = CloudLoggingHandler(logging_client, name='mylogname')
cloud_logger = logging.getLogger()
cloud_logger.setLevel(logging.INFO)
cloud_logger.addHandler(handler)
cloud_logger.error('Hello, world!')