Spring Boot微服务设置logback日志打印级别并关闭kafka debug日志

摘要:以关闭Spring Boot微服务kafka日志为例,介绍logback日志框架中logger标签的属性。

问题描述

  在Spring Boot整合kafka的时候,日志配置使用 logback.xml,引用中引用了kafka的生产者和消费者。在应用启动后,发现控制台疯狂打印类似如下的kafka日志片段:

// 虽然启动成功后只打印一次,但是,懒婆娘的裹脚——又臭又长
INFO -o.a.k.c.consumer.ConsumerConfig - ConsumerConfig values: 
	allow.auto.create.topics = true
	auto.commit.interval.ms = 5000
	auto.offset.reset = latest
...
// 一直刷屏的 Kafka 核心日志片段
[KafkaConsumerDestination{consumerDestinationName='test', partitions=1, dlqName='test'}.container-0-99-1] DEBUG-o.apache.kafka.clients.NetworkClient
[KafkaConsumerDestination{consumerDestinationName='test', partitions=1, dlqName='test'}.container-0-99-1] DEBUG-o.a.k.c.consumer.internals.Fetcher
[KafkaConsumerDestination{consumerDestinationName='test', partitions=1, dlqName='test'}.container-0-99-1] DEBUG-o.a.k.clients.FetchSessionHandler 

  导致无法查看正常的其它日志,显而易见,KafkaConsumerDestination等信息是kafka的日志,与业务日志无关。如何关闭这些日志呢?

  解铃还须系铃人,通过分析日志信息,发现它们是由org.apache.kafka.clients.xxx打印的,故使用如下配置提升org.apache.kafka.clients中日志输出级别,问题迎刃而解:

<logger name="org.apache.kafka" level="error"/>

  当然,level可以根据需要修改,也可以选用info或者off。logback.xml 中部分配置代码如下:

<?xml version="1.0" encoding="UTF-8" ?>
<configuration debug="false">
    <!-- 定义日志文件的存储地址 不要在logback的配置中使用相对路径 -->
    <property name="LOG_HOME" value="logs/"></property>

    <!-- 配置控制台输出 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!-- 格式化输出: %d表示日期, %thread表示线程名, %-5level: 级别从左显示5个字符宽度 %msg:日志消息, %n是换行符 -->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS}[%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- 按照每天生成日志文件 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- 日志文件输出的文件名 -->
            <FileNamePattern>${LOG_HOME}/%d{yyyy-MM-dd}.%i.log</FileNamePattern>
            <maxFileSize>50MB</maxFileSize>
            <!-- 日志文件保留天数 -->
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS}[%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- 日志输出级别 -->
    <root level="INFO">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="FILE"/>
    </root>
     <!-- 定制化某些包的日志输出级别 -->
    <logger name="org.apache.kafka" level="warn" additivity="false"/>
    <logger name="org.springframework" level="info">
		<appender-ref ref="stdout" />
	</logger>
</configuration>

如何解决

  只需要在logback.xml文件中加入下面的语句,就可以通过提升kafka的日志打印级别来减少日志打印,避免日志刷屏:

 	<!-- 屏蔽kafka debug,,可以指定为info或者error,使用off可以直接关闭 -->
	<logger name="org.apache.kafka.clients" level="warn"  additivity="false">/>

  name属性后面的包名可以自由发挥,用于指定想提升日志级别的包名。上述配置起到的作用如下:设置包名 org.apache.kafka.clients 下各个类日志打印级别为 warn,additivity属性为false,表示此loger的打印信息不再向上级传递。

设置logger标签

  logger标签用来设置某一个包或者某一个具体类的日志打印级别,同时可以指定。它包含四个属性:必填的name属性、可选的level、可选的addtivity和可选的appender-ref属性。

  name:指定被设置对象,可以是某一个包,也可以是某一个具体的类。

  level:设置日志打印级别,不区分大小写,日志级别的枚举值包括八个:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,还有一个特殊值INHERITED或者同义词NULL,代表强制执行上级的级别。如果未设置此属性,那么当前loger将会继承上级的级别。OFF是关闭日志打印的意思。

  addtivity:是否向上级logger传递打印信息,若传递,则同样的日志将被打印多次。默认是true。

  appender-ref:表示这个appender将会添加到这个logger。上述示例并未设置此属性。

结束语

  欢迎点赞阅读,一同学习交流;若有疑问,请在文章下方留下你的神评妙论!以促使博文💯高质量。

Reference

posted @ 2022-05-29 18:26  楼兰胡杨  阅读(8212)  评论(0编辑  收藏  举报