将Spring默认「Started」日志级别从INFO改为WARN的方法
Spring启动日志级别调整与Kibana快速区分方案
能否将该日志改为WARN级别输出?
可以实现,但常规的logger级别配置无效——因为这条日志是Spring Boot代码中硬编码用INFO级别输出的。要修改它的输出级别,得借助Logback的过滤器来改写日志级别:
方法1:自定义过滤器类
- 编写一个简单的过滤器类,匹配目标日志并修改其级别:
import ch.qos.logback.classic.spi.ILoggingEvent; import ch.qos.logback.core.filter.Filter; import ch.qos.logback.core.spi.FilterReply; public class SpringStartupLogFilter extends Filter<ILoggingEvent> { @Override public FilterReply decide(ILoggingEvent event) { // 匹配"Started XXXX in X.XXX seconds (JVM running for X.XXX)"格式的日志 boolean isTargetLog = event.getLevel().equals(ch.qos.logback.classic.Level.INFO) && event.getMessage().startsWith("Started ") && event.getMessage().contains("seconds (JVM running for"); if (isTargetLog) { // 将级别改为WARN event.setLevel(ch.qos.logback.classic.Level.WARN); return FilterReply.ACCEPT; } return FilterReply.NEUTRAL; } }
- 在
logback-spring.xml的对应appender中注册这个过滤器:
<appender name="YOUR_APPENDER_NAME" class="ch.qos.logback.core.ConsoleAppender"> <!-- 注册自定义过滤器 --> <filter class="com.your.package.SpringStartupLogFilter"/> <!-- 其他appender配置,比如encoder --> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender>
方法2:用内置过滤器组合(无需自定义代码)
如果不想写自定义类,可以用Logback的EvaluatorFilter配合LevelChangeFilter,通过表达式匹配目标日志并修改级别:
<appender name="YOUR_APPENDER_NAME" class="ch.qos.logback.core.ConsoleAppender"> <filter class="ch.qos.logback.core.filter.EvaluatorFilter"> <evaluator class="ch.qos.logback.classic.boolex.JaninoEventEvaluator"> <!-- 表达式匹配目标日志 --> <expression> level == INFO && message.startsWith("Started ") && message.contains("seconds (JVM running for") </expression> </evaluator> <onMatch>ACCEPT</onMatch> <onMismatch>NEUTRAL</onMismatch> <!-- 将匹配到的INFO日志改为WARN级别 --> <filter class="ch.qos.logback.classic.filter.LevelChangeFilter"> <level>INFO</level> <targetLevel>WARN</targetLevel> </filter> </filter> <!-- 其他appender配置 --> </appender>
无法修改级别时,Kibana快速区分方案
如果上述配置因为版本兼容、日志初始化时机等问题无法生效,可以用以下方式在Kibana中快速定位这条日志:
- 保存搜索过滤器:在Discover页面直接搜索
message:"Started * seconds (JVM running for",将这个搜索条件保存为过滤器,之后一键调用即可筛选出目标日志。 - 添加自定义采集字段:如果用Filebeat等工具采集日志,可以在采集规则中给匹配该特征的日志添加自定义字段(比如
log_category:spring_startup),之后在Kibana中通过log_category:spring_startup快速筛选。 - 创建专属可视化:针对这条日志的启动时间字段创建可视化图表(比如折线图统计启动耗时趋势),添加到仪表盘,方便快速查看和区分。
- 打自定义标签:在Discover页面找到目标日志后,给它添加
spring_startup这类自定义标签,后续可通过标签快速筛选。
内容的提问来源于stack exchange,提问作者Ismael Marquez
相关产品推荐
相关产品推荐

