首页 > 解决方案 > 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 界面上的结果:

结果登录

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

现在我尝试仅显示我的云功能的日志:

结果登录

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

我想我一定是在做坏事,但我看不出是什么,因为我想做的事情相当简单。有人能帮帮我吗 ?谢谢 !

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

标签: pythongoogle-cloud-platformgoogle-cloud-functionsgoogle-cloud-logging

解决方案


尝试将您的设置移到函数之外:

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")

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


推荐阅读