如何在GCP Logging中配置Python日志格式显示内部函数名
可以实现该需求,你无需修改GCP Logging服务端配置,仅需要调整Python侧的日志格式化规则,将Python原生logging内置的funcName字段加入到日志格式中即可。
实现方法
1. 自定义日志格式化规则
你可以在Cloud Function初始化阶段,给日志处理器设置和本地格式对齐的自定义Formatter,示例代码如下:
import logging from google.cloud.logging import Client from google.cloud.logging.handlers import CloudLoggingHandler # 初始化GCP Logging客户端 gcp_log_client = Client() cloud_handler = CloudLoggingHandler(gcp_log_client) # 定义日志格式,其中%(funcName)s就是打印日志所在的函数名变量 custom_formatter = logging.Formatter( "%(name)s - [%(levelname)s] - [%(funcName)s] - [%(asctime)s] - %(message)s", datefmt="%d-%b-%y %H:%M:%S" ) cloud_handler.setFormatter(custom_formatter) # 挂载处理器到根日志器 root_logger = logging.getLogger() root_logger.addHandler(cloud_handler) root_logger.setLevel(logging.INFO)
2. 效果验证
部署后调用函数时,validate_schema内输出的日志会自动带上函数名,最终GCP Logging中展示的日志格式会和你本地运行的输出完全一致。
补充说明
- GCP Logging默认没有展示内部调用函数名,是因为
google-cloud-logging库的默认格式化规则没有包含funcName字段,只会把Cloud Function入口名作为元数据展示,自定义格式加入该字段即可解决问题。 - 如果你使用的是Cloud Function Python运行时默认集成的日志能力,不需要单独初始化
CloudLoggingHandler,直接修改根日志器已有处理器的Formatter即可,核心逻辑都是在格式字符串中加入%(funcName)s变量。
内容的提问来源于stack exchange,提问作者Henrique Poleselo
相关产品推荐
相关产品推荐

