python - 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 个错误行...)
我想我一定是在做坏事,但我看不出是什么,因为我想做的事情相当简单。有人能帮帮我吗 ?谢谢 !
编辑:我把客户端的初始化放在函数中是错误的,这解释了日志显示不止一次。剩下的一个问题是警告在“云功能”选项卡中显示为错误,并在“全局”选项卡中正确显示。有人对此有想法吗?
解决方案
尝试将您的设置移到函数之外:
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")
按原样,您正在为每个实例的每个请求添加新的处理程序。
推荐阅读
- jquery - 如何将防伪令牌和序列化对象作为参数传递给 MVC 操作
- java - Using SharedPreferences to save variable makes my app crash
- javascript - 当 JS 重定向到其他页面时,Chrome 显示 URL
- java - Android VPNService 如何与 Internet 通信
- javascript - 将异步请求组合成一个 GET API
- opencl - 内存如何映射到 gpu(opencl Intel 显卡)
- css - 有人可以帮助我解决如何从我的网站 www.startfurnishing.com 上的精选帖子中禁用“睫毛/视图”图标的问题吗?
- sql-server - 我应该为 SQLServer 的块拆分长结果 sql 查询吗?
- android - Android Things - 在 Pi 中同时使用虚拟键盘和物理键盘(条形码扫描仪)
- c - 从 arduino 上的传入蓝牙序列中提取值