如何配置Spring将指定类的ERROR日志级别调整为WARN?
如何将DefaultMessageListenerContainer的连接失败日志从ERROR调低至WARN?
当然可以实现,核心是通过日志框架(而非Spring本身)的配置来调整日志级别或重写特定日志的输出级别,以下是两种常见场景的实现方式:
一、快速方案:全局调整该类的日志级别
如果你可以接受org.springframework.jms.listener.DefaultMessageListenerContainer类的所有ERROR级日志都以WARN级别输出(或只保留WARN及以下级别的日志),直接在日志配置文件中添加规则即可:
Logback(logback.xml)
<logger name="org.springframework.jms.listener.DefaultMessageListenerContainer" level="WARN" />
Log4j2(log4j2.xml)
<Logger name="org.springframework.jms.listener.DefaultMessageListenerContainer" level="WARN" additivity="false"> <AppenderRef ref="你的日志输出Appender"/> </Logger>
二、精准方案:仅降级连接失败相关的ERROR日志
如果不想影响该类其他正常的ERROR日志,只针对连接失败的特定日志消息降级,可以通过自定义过滤/重写机制实现:
Logback 自定义TurboFilter
- 编写一个过滤器类,识别连接失败的日志并修改级别:
import ch.qos.logback.classic.Level; import ch.qos.logback.classic.turbo.TurboFilter; import ch.qos.logback.core.spi.FilterReply; import org.slf4j.Marker; public class JmsConnErrorFilter extends TurboFilter { @Override public FilterReply decide(Marker marker, ch.qos.logback.classic.Logger logger, Level level, String format, Object[] params, Throwable t) { // 匹配目标类、ERROR级别、连接失败的日志消息 if ("org.springframework.jms.listener.DefaultMessageListenerContainer".equals(logger.getName()) && Level.ERROR.equals(level) && format != null && format.contains("Could not refresh JMS Connection")) { // 以WARN级别重新输出该日志 logger.warn(format, params, t); return FilterReply.DENY; // 阻止原ERROR日志输出 } return FilterReply.NEUTRAL; // 其他日志正常处理 } }
- 在logback.xml中注册这个过滤器:
<turboFilter class="com.你的包名.JmsConnErrorFilter" />
Log4j2 使用RewriteAppender
通过RewriteAppender匹配特定日志并修改级别:
<Appenders> <Rewrite name="JmsRewriteAppender"> <AppenderRef ref="你的原有输出Appender"/> <RewritePolicy class="org.apache.logging.log4j.core.appender.rewrite.MapRewritePolicy"> <KeyValuePair key="level" value="WARN"/> <!-- 匹配规则:目标类、ERROR级别、连接失败消息 --> <Condition> <LoggerNameMatch name="org.springframework.jms.listener.DefaultMessageListenerContainer"/> <LevelMatch level="ERROR"/> <MessageMatch regex="Could not refresh JMS Connection.*"/> </Condition> </RewritePolicy> </Rewrite> </Appenders> <Loggers> <Logger name="org.springframework.jms.listener.DefaultMessageListenerContainer" level="ERROR" additivity="false"> <AppenderRef ref="JmsRewriteAppender"/> </Logger> </Loggers>
内容的提问来源于stack exchange,提问作者Florian
相关产品推荐
相关产品推荐

