我已经使用运行时python37部署了Cloud Functions。我的问题是如何使用不同的severity
和相同的execution_id
打印或记录日志,通过 Stackdriver Logging 界面可以按日志级别轻松过滤或记录日志。
默认情况下,print
将使用相同的execution_id
,但我无法指定severity
。
我已经尝试过logging
和google-cloud-logging
,但是他们无法记录execution_id
,这对于调试GCF非常有用。
答案 0 :(得分:2)
如果您确实想要print
默认情况下的执行ID,则在request.headers.get("Function-Execution-Id")
中可用于https触发函数和后台函数,该ID与context.event_id
相同。因此,您可以修改llompalles's answer并在函数内部创建Resource并将执行ID添加到资源中
答案 1 :(得分:1)
当前无法将execution_id
添加到日志条目。但是按照this answer中的方法,您可以在Stackdriver Logging界面中轻松过滤属于同一功能执行的日志条目。
使用此Cloud Function代码:
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 Logging界面中打开日志条目。显示jsonPayload
,然后单击id
元素,它将显示Show matching entries
。这将添加过滤器:
resource.type="cloud_function"
resource.labels.function_name="yourFunctionName"
jsonPayload.id="theID"
将显示属于此执行的所有日志条目。
最后,请记住,Cloud Function Python 3.7运行时仍处于beta中,并且可能会受到将来的更改。