我使用运行时python37部署了云函数。我的问题是如何使用不同的severity和相同的execution_id打印或日志记录,这可以很容易地通过日志级别通过Stackdriver接口进行过滤。
默认情况下,print将使用相同的execution_id,但我无法指定severity。

我尝试过logging和google-cloud-logging,但是他们无法记录execution_id,这对于调试GCF非常有用。

发布于 2019-02-13 15:09:33
如果您真的想要print默认使用的执行id,那么它在request.headers.get("Function-Execution-Id")中可以用于https触发函数和背景函数,它与context.event_id相同。因此,您可以修改llompalles's answer并在函数中创建资源,并将执行id添加到资源中
发布于 2019-02-13 16:27:00
目前,无法将execution_id添加到日志条目中。但是,按照this answer中的方法,您可以轻松地过滤属于Stackdriver接口中相同函数执行的日志条目。
使用此云函数代码:
import time
from google.cloud import logging
from google.cloud.logging.resource import Resource
identifier = str(time.time())
log_client = logging.Client()
log_name = 'cloudfunctions.googleapis.com%2Fcloud-functions'
resource = Resource(type="cloud_function", labels={"function_name": "yourCloudFunctionName", "region": "yourFunctionLocation"})
logger = log_client.logger(log_name.format("yourProjectId"))
def hello_world(request):
logger.log_struct({"message": "message string to log", "id": identifier}, resource=resource, severity='ERROR')
return 'Wrote logs to {}.'.format(logger.name) 一旦执行,打开Strackdriver接口中的日志条目。显示jsonPayload并单击id元素,它将显示Show matching entries。这将添加过滤器:
resource.type="cloud_function"
resource.labels.function_name="yourFunctionName"
jsonPayload.id="theID"将显示属于此执行的所有日志条目。
最后,请记住云函数Python3.7运行时仍然处于测试版,可能会受到未来的更改。
https://stackoverflow.com/questions/54660919
复制相似问题