GCP中Cloud Batch作业完成后出现ERROR级日志的原因及解决方法
问题:Cloud Batch作业完成后Log Explorer出现ERROR级别的日志消息
在GCP中通过Cloud Workflow运行一个简单的Cloud Batch作业,作业代码如下:
import json import os import logging import google.cloud.logging log_client = google.cloud.logging.Client() log_client.setup_logging() # total arguments file_task_records = json.loads(os.environ['FILE_TASK_RECORDS'].replace("'", '"')) logging.info(f'BATCH JOB: {file_task_records}')
作业运行符合预期,但作业完成后,Log Explorer中出现三条ERROR级别的日志消息:
Program shutting down, attempting to send 1 queued log entries to Cloud Logging... Waiting up to 5 seconds. Sent all pending logs.
请问出现该错误的原因是什么?该如何修复?
原因分析
这是google-cloud-logging库的一个已知问题:当程序退出时,日志客户端在尝试发送剩余队列中的日志条目时,错误地将这些正常的 shutdown 提示信息标记为ERROR级别。这些内容并非真正的错误,只是日志级别被错误归类了。
修复方案
方法1:主动控制日志客户端关闭流程
在程序结束前手动刷新并关闭日志处理器,避免触发默认的shutdown逻辑,示例代码如下:
import json import os import logging import google.cloud.logging from google.cloud.logging_v2.handlers import CloudLoggingHandler log_client = google.cloud.logging.Client() handler = CloudLoggingHandler(log_client) logging.basicConfig(handlers=[handler], level=logging.INFO) # 处理业务逻辑 file_task_records = json.loads(os.environ['FILE_TASK_RECORDS'].replace("'", '"')) logging.info(f'BATCH JOB: {file_task_records}') # 主动刷新日志并关闭处理器 handler.flush() handler.close()
方法2:在Log Explorer中过滤误标日志
通过添加查询过滤条件,在Log Explorer中屏蔽这些并非真正错误的日志内容:
NOT textPayload:"Program shutting down, attempting to send" AND NOT textPayload:"Waiting up to" AND NOT textPayload:"Sent all pending logs"
方法3:升级google-cloud-logging库
官方后续版本已修复该日志级别误标记的问题,执行以下命令升级到最新版本:
pip install --upgrade google-cloud-logging
内容的提问来源于stack exchange,提问作者Sergii
相关产品推荐
相关产品推荐

