You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GKE Log Explorer中Spring Boot日志级别均显示为INFO的问题排查

解决GKE中Spring Boot日志级别识别异常的问题

方案1:用Spring Cloud GCP日志 starter 自带的增强控制台输出

你之前加/移除spring-cloud-gcp-starter-logging没效果,大概率是没用到它提供的专用日志输出器。这个starter自带了CONSOLE_GCP Appender,既能保持文本日志的可读性,又能自动把日志级别同步到GKE的severity字段。

操作步骤:

  1. 先把依赖加回来(版本和你的spring-cloud-gcp保持一致):
<dependency>
    <groupId>com.google.cloud</groupId>
    <artifactId>spring-cloud-gcp-starter-logging</artifactId>
    <version>4.1.1</version>
</dependency>
  1. 创建src/main/resources/logback-spring.xml,替换默认日志配置:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- 引入Spring Boot默认日志配置 -->
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
    <!-- 引入GCP提供的日志Appender配置 -->
    <include resource="com/google/cloud/spring/logging/logback-appender.xml"/>
    
    <root level="INFO">
        <!-- 使用GCP增强版控制台输出器 -->
        <appender-ref ref="CONSOLE_GCP"/>
    </root>
</configuration>

这个配置会输出和你原有格式类似的可读文本日志,同时在日志元数据中注入GKE日志采集器能识别的级别信息,不用切换到JSON格式。

方案2:自定义日志格式,让GKE日志采集器识别级别

如果你不想用GCP的starter Appender,也可以调整自己的日志pattern,让GKE默认的Fluent Bit日志采集器通过正则匹配出级别。

你的现有pattern里已经有[%-5level],只要保持这个格式固定,就可以给Fluent Bit添加自定义解析规则:

  1. 给集群的Fluent Bit配置添加自定义parser:
[PARSER]
    Name        spring-boot-custom
    Format      regex
    Regex       \[(?<time>[^\]]+)\] \[(?<app_name>[^\]]+)\] \[(?<trace_info>[^\]]+)\] \[(?<level>[A-Z]+)\] - .*
    Time_Key    time
    Time_Format %yyyy-MM-dd HH:mm:ss:SSS
  1. 在Fluent Bit的input配置中指定用这个parser解析你的应用日志。
    不过这个方法需要你有修改集群日志采集配置的权限,不如应用端配置省心。

方案3:手动在MDC中注入级别(进阶)

如果上面的方法都不行,还可以在日志输出时手动把级别放到MDC的severity字段,GKE采集器会自动识别这个字段:

  1. 自定义一个Logback转换器,把级别放到MDC:
public class GcpSeverityConverter extends ClassicConverter {
    @Override
    public String convert(ILoggingEvent event) {
        MDC.put("severity", event.getLevel().toString());
        return event.getLevel().toString();
    }
}
  1. 在logback配置中注册这个转换器,然后修改pattern:
<configuration>
    <conversionRule conversionWord="gcpLevel" converterClass="com.yourpackage.GcpSeverityConverter"/>
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>[%d{yyyy-MM-dd HH:mm:ss:SSS}] [${spring.application.name}] [%X{traceId},%X{spanId},%X{spanExportable}] [%gcpLevel] - [%15.15t] %-30.30c{1.} - %m%n</pattern>
        </encoder>
    </appender>
    <root level="INFO">
        <appender-ref ref="CONSOLE"/>
    </root>
</configuration>

这样日志输出时MDC里会有severity字段,GKE采集器会自动映射到日志的severity属性,同时日志文本还是原来的格式。

验证方式

部署修改后的应用,打一条WARN日志:

  • 在GKE Log Explorer里检查severity字段,应该显示为WARN
  • 用kubectl logs <pod-name>查看,日志还是清晰的文本格式,不会变成JSON

内容的提问来源于stack exchange,提问作者Tim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 08:35:26