在谷歌应用程序引擎中,第一代日志是在日志查看器中根据请求自动分组的,而在第二代中,设置起来很容易。
在后台云函数中,我找不到任何方法(在日志查看器中保存executionId
手动过滤(。从网上的各种文章中,我读到关键是在调用Stackdriver Logging API时将trace
参数设置为Trace ID,并且在HTTP上下文中,可以在X-Cloud-Trace-Context
头中找到该ID。
后台上下文中没有标头(例如,从Pub/Sub或Storage触发器调用(。我尝试将其设置为任意值,例如函数上下文中的event_id
,但没有进行分组。
以下是我如何尝试的缩小表示:
from google.cloud.logging.resource import Resource
import google.cloud.logging
log_name = 'cloudfunctions.googleapis.com%2Fcloud-functions'
cloud_client = google.cloud.logging.Client()
cloud_logger = cloud_client.logger(log_name)
request_id = None
def log(message):
labels = {
'project_id': 'settle-leif',
'function_name': 'group-logs',
'region': 'europe-west1',
}
resource = Resource(type='cloud_function', labels=labels)
trace_id = f'projects/settle-leif/traces/{request_id}'
cloud_logger.log_text(message, trace=trace_id, resource=resource)
def main(_data, context):
global request_id
request_id = context.event_id
log('First message')
log('Second message')
目前这是可能的。
我们的路线图上有提供这种支持的内容:https://github.com/GoogleCloudPlatform/functions-framework-python/issues/79