LoginSignup
6
3

More than 1 year has passed since last update.

PythonでGoogle Cloud Loggingへログ出力

Last updated at Posted at 2020-12-06

概要

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!')
6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3