私はこのガイドに続きます https://firebase.google.com/docs/hosting/cloud-run Cloud Run Dockerを設定します。それから私はこのガイドに従うことを試みました https://cloud.google.com/run/docs/logging 単純なログを実行します。 stdoutに構造化されたログを書き込もうとしているこれは私のコードです:
trace_header = request.headers.get('X-Cloud-Trace-Context')
if trace_header:
trace = trace_header.split('/')
global_log_fields['logging.googleapis.com/trace'] = "projects/sp-64d90/traces/" + trace[0]
# Complete a structured log entry.
entry = dict(severity='NOTICE',
message='This is the default display field.',
# Log viewer accesses 'component' as jsonPayload.component'.
component='arbitrary-property',
**global_log_fields)
print(json.dumps(entry))
_
クラウドログビューアにこのログを表示できません。 Dockerを呼び出すたびに、HTTP GETログが表示されます。何も見逃していますか?私はこれに新しくて、私が作成したドッカーがガイドからの手順と完全であると仮定して、情報を記録し、それを見ることができるようなシミュレーションの方法は何ですか( https://firebase.google.com/docs) /ホスティング/クラウドラン )
ありがとう
Google Cloud LogggingのBunyanおよびWinston Node.jsライブラリのサポートがあります。
通常、DOを見ていない場合構造化ロギング、あなたがする必要があるのはstdout/stderrに印刷することだけで、クラウドランはそれを拾い上げます。
これは、 https://cloud.google.com/run/docs/logging 、構造化および非構造化ロギングのためのnode.jsの例を持っています。
Google Cloud Platformのログ記録をPythonコードに統合する簡単な方法は、logging.StreamHandler
からサブクラスを作成することです。このようにして、ロギングレベルもGoogle Cloud Loggingのものと一致し、重大度に基づいてフィルタリングすることができます。このソリューションは、クラウドランコンテナ内でも機能します。
また、現在のロギングコードを変更する必要なく、このハンドラを既存のロガー構成に追加するだけです。
import json
import logging
import os
import sys
from logging import StreamHandler
from flask import request
class GoogleCloudHandler(StreamHandler):
def __init__(self):
StreamHandler.__init__(self)
def emit(self, record):
msg = self.format(record)
# Get project_id from Cloud Run environment
project = os.environ.get('GOOGLE_CLOUD_PROJECT')
# Build structured log messages as an object.
global_log_fields = {}
trace_header = request.headers.get('X-Cloud-Trace-Context')
if trace_header and project:
trace = trace_header.split('/')
global_log_fields['logging.googleapis.com/trace'] = (
f"projects/{project}/traces/{trace[0]}")
# Complete a structured log entry.
entry = dict(severity=record.levelname, message=msg)
print(json.dumps(entry))
sys.stdout.flush()
ハンドラを設定して使用する方法は次のとおりです。
def get_logger():
logger = logging.getLogger(__name__)
if not logger.handlers:
gcp_handler = GoogleCloudHandler()
gcp_handler.setLevel(logging.DEBUG)
gcp_formatter = logging.Formatter(
'%(levelname)s %(asctime)s [%(filename)s:%(funcName)s:%(lineno)d] %(message)s')
gcp_handler.setFormatter(gcp_formatter)
logger.addHandler(gcp_handler)
return logger