如何在Google Cloud Functions中以不同的严重性级别进行记录

时间:2019-02-13 00:52:53

标签: python logging google-cloud-functions stackdriver google-cloud-logging

我已经使用运行时python37部署了Cloud Functions。我的问题是如何使用不同的severity和相同的execution_id打印或记录日志,通过 Stackdriver Logging 界面可以按日志级别轻松过滤或记录日志。

默认情况下,print将使用相同的execution_id,但我无法指定severityenter image description here

我已经尝试过logginggoogle-cloud-logging,但是他们无法记录execution_id,这对于调试GCF非常有用。 enter image description here

2 个答案:

答案 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中,并且可能会受到将来的更改。