云功能导致Google Cloud Logging故障

时间:2020-03-31 12:59:30

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

我目前正在尝试部署由Python编写的Pub / Sub触发的云功能。以前,我们使用loguru进行记录。我现在要切换到云日志。我以为这会很简单,但是很困惑。这是我在Cloud Function中部署的代码,只是为了尝试记录日志:

import base64
import logging
import google.cloud.logging as google_logging

def hello_pubsub(event, context):
     client = google_logging.Client()
     client.setup_logging()
     logging.debug("Starting function")
     logging.info("Hello")

     logging.warning("warning ! ")

     pubsub_message = base64.b64decode(event['data']).decode('utf-8')
     logging.info(pubsub_message)
     logging.error("Exit function")

我遵循了可以在该主题上找到的文档(但是这些页面可以显示各种方法,而且不太清楚)。这是Logging界面上的结果:

Resulting logs in "global" tab

这是“全局”日志中的结果。这里有两个问题:即使我在界面中明确将日志级别设置为“调试”,为什么也没有显示调试日志?为什么将日志随机显示1、2或3次?

现在,我尝试仅显示我的Cloud Function的日志:

Resulting logs in "Cloud Function" logs for my function

这变得越来越糟,现在日志最多显示5次(甚至与“全局”选项卡中显示的次数不同),信息级别都错误(logging.info产生1条信息行,1条错误行;错误和警告导致2条错误行...)

我想我一定做得不好,但是我看不到,因为我想做的事情很简单。有人能帮帮我吗 ?谢谢 !

编辑:我在将客户端的初始化放到函数中时犯了一个错误,这解释了日志显示了多次。剩下的一个问题是,警告在“云功能”选项卡中显示为错误,并在“全局”选项卡中正确显示。有人对此有想法吗?

2 个答案:

答案 0 :(得分:1)

尝试将设置移到该功能之外:

import base64
import logging
import google.cloud.logging as google_logging

client = google_logging.Client()
client.setup_logging()

def hello_pubsub(event, context):
     logging.debug("Starting function")
     logging.info("Hello")

     logging.warning("warning ! ")

     pubsub_message = base64.b64decode(event['data']).decode('utf-8')
     logging.info(pubsub_message)
     logging.error("Exit function")

照原样,您要为每个实例的每个请求添加新的处理程序。

答案 1 :(得分:1)

您应该使用Integration with Python logging module¶

import logging
import base64
import google.cloud.logging # Don't conflict with standard logging
from google.cloud.logging.handlers import CloudLoggingHandler
client = google.cloud.logging.Client()
handler = CloudLoggingHandler(client)
cloud_logger = logging.getLogger('cloudLogger')
cloud_logger.setLevel(logging.INFO) # defaults to WARN
cloud_logger.addHandler(handler)



def hello_pubsub(event, context):

     import logging
     cloud_logger.debug("Starting function")
     cloud_logger.info("Hello")

     cloud_logger.warning("warning ! ")

     pubsub_message = base64.b64decode(event['data']).decode('utf-8')
     cloud_logger.info(pubsub_message)
     cloud_logger.error("Exit function")

     return 'OK', 200

enter image description here