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:設置日志打印級別,不區分大小寫,日志級別的枚舉值包括八個:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,還有一個特殊值INHERITED或者同義詞NULL,代表強制執行上級的級別。如果未設置此屬性,那么當前loger將會繼承上級的級別。OFF是關閉日志打印的意思。
??addtivity:是否向上級logger傳遞打印信息,若傳遞,則同樣的日志將被打印多次。默認是true。
??appender-ref:表示這個appender將會添加到這個logger。上述示例并未設置此屬性。
結束語
??歡迎點贊閱讀,一同學習交流;若有疑問,請在文章下方留下你的神評妙論!以促使博文??高質量。
Reference
Buy me a coffee. ?Get red packets.
浙公網安備 33010602011771號