11

マイ スタック:
Google App Engine 標準
Python (2.7)

目標:
Google Stackdriver Logging で名前付きログを作成するには、https: //console.cloud.google.com/logs/viewer

ドキュメント - Stackdriver Logging: https://google-cloud-python.readthedocs.io/en/latest/logging/usage.html

コード:

from google.cloud import logging as stack_logging
from google.cloud.logging.resource import Resource
import threading

class StackdriverLogging:
    def __init__(self, resource=Resource(type='project', labels={'project_id': 'project_id'}), project_id='project_id'):

    self.resource = resource
    self.client = stack_logging.Client(project=project_id)

    def delete_logger(self, logger_name):
        logger = self.client.logger(logger_name)
        logger.delete()

    def async_log(self, logger_name, sev, msg):
        t = threading.Thread(target=self.log, args=(logger_name, sev, msg,))
        t.start()

    def log(self, logger_name, sev, msg):
        logger = self.client.logger(logger_name)

    if isinstance(msg, str):
        logger.log_text(msg, severity=sev, resource=self.resource)
    elif isinstance(msg, dict):
        logger.log_struct(msg, severity=sev, resource=self.resource)

class hLog(webapp2.RequestHandler):
   def get(self):
      stackdriver_logger = StackdriverLogging()
      stackdriver_logger.async_log("my_new_log", "WARNING", msg="Hello")
      stackdriver_logger.async_log("my_new_log", "INFO", msg="world")

エラー: 応答が一致しない 1 つの RPC 要求が見つかりました

これが Google App Engine Standard (Python) で不可能な場合、このコードを機能させる方法は次のとおりです。

  from google.cloud import logging
  client = logging.Client()
  # client = logging.Client.from_service_account_json('credentials.json')
  logger = client.logger("my_new_log")
  logger.log_text("hello world") 

資格情報が必要な場合は、プロジェクト サービス アカウントを使用します。

どんな助けでも大歓迎です。ありがとうございました。

4

1 に答える 1