我目前正在尝试部署由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次?
现在,我尝试仅显示我的Cloud Function的日志:
这变得越来越糟,现在日志最多显示5次(甚至与“全局”选项卡中显示的次数不同),信息级别都错误(logging.info产生1条信息行,1条错误行;错误和警告导致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