springboot專案大量列印debug日誌問題

2022-09-12 02:39:09 字數 3701 閱讀 1786

目前,j**a下應用最廣泛的日誌系統主要就是兩個系列: log4j和slf4j+logback 。

其中,slf4j只包含日誌的介面,logback只包括日誌的具體實現,兩者加起來才是乙個完整的日誌系統。log4j則同時包含了日誌介面和實現。

這兩套日誌系統之間有可以相互相容的元件,分別是slf4j-log4j12和 log4j-over-slf4j,引入之後就可以用log4j打出slf4j介面的日誌,或者用logback打出log4j介面的日誌。

背景知識介紹到這裡,再簡單說一下標題裡提到的問題。問題的現象就是我們在war包裡配置了log4j的日誌級別為info, 但在catalina裡卻一直在打大量的debug日誌。初看現象肯定很詭異,前期各種研究tomcat配置也沒什麼頭緒。直到磁碟壓力太大,去看jstack發現大量程序是等待在logback**中,才發現之前關注錯了重點。再去具體了解了j**a下的日誌系統後,問題也就很明了了。

先把幾個事實擺出來:

1. 打出的debug日誌都是用slf4j寫的,根據堆疊得知logback具體執行了日誌列印

2. logback在無配置檔案時預設debug級別

3. 我們的war包中同時包含logback,log4j和slf4j-log4j12

4. slf4j無法主動選擇具體的日誌實現

想必看到這裡,大家也明白了問題所在。根據我們引入的包,log4j和logback都可以實現列印slf4j日誌,而具體誰來打,不是乙個用正常辦法可以控制的事情,在這個具體案例下,logback就成了具體的日誌列印者。而因為我們其實是想用lo4j打日誌,所以沒有配logback配置,所以logback就按預設的debug級別打了大量日誌。

解決辦法也很簡單,就是把logback的包全去掉。看似有些暴力,但確實是最合理的乙個解決辦法。

檢視依賴,發現spring-boot-starter-web包含了logback依賴包,將其移除即可。

<

dependencies

>

<

dependency

>

<

groupid

>org.springframework.boot

groupid

>

<

artifactid

>spring-boot-starter-web

artifactid

>

<

exclusions

>

<

exclusion

>

<

artifactid

>logback-classic

artifactid

>

<

groupid

>ch.qos.logback

groupid

>

exclusion

>

<

exclusion

>

<

artifactid

>logback-core

artifactid

>

<

groupid

>ch.qos.logback

groupid

>

exclusion

>

exclusions

>

dependency

>

<

dependency

>

<

groupid

>com.alibaba

groupid

>

<

artifactid

>fastjson

artifactid

>

<

version

>1.2.29

version

>

dependency

>

<

dependency

>

<

groupid

>dom4j

groupid

>

<

artifactid

>dom4j

artifactid

>

<

version

>1.6.1

version

>

dependency

>

<

dependency

>

<

groupid

>org.apache.activemq

groupid

>

<

artifactid

>activemq-core

artifactid

>

<

version

>5.7.0

version

>

dependency

>

<

dependency

>

<

groupid

>log4j

groupid

>

<

artifactid

>log4j

artifactid

>

<

version

>1.2.12

version

>

dependency

>

<

dependency

>

<

groupid

>org.slf4j

groupid

>

<

artifactid

>slf4j-api

artifactid

>

<

version

>1.7.26

version

>

dependency

>

<

dependency

>

<

groupid

>org.slf4j

groupid

>

<

artifactid

>slf4j-log4j12

artifactid

>

<

version

>1.7.26

version

>

<

exclusions

>

<

exclusion

>

<

artifactid

>log4j

artifactid

>

<

groupid

>log4j

groupid

>

exclusion

>

exclusions

>

dependency

>

dependencies

>

最後提供乙個排查日誌問題的通用套路,免得找不到方向亂看。

1. 找幾行不符合自己日誌配置的具體日誌,翻閱對應**,看看是哪個日誌介面打的

2. 查jar包,看看這套日誌框架有哪些具體實現

3. 把多的jar包去掉

參考博文:

spring boot打jar包和打war包的區別

原文 spring boot既可以打成war發布,也可以找成jar包發布。說一下區別 jar包 直接通過內建tomcat執行,不需要額外安裝tomcat。如需修改內建tomcat的配置,只需要在spring boot的配置檔案中配置。內建tomcat沒有自己的日誌輸出,全靠jar包應用輸出日誌。但是...

踩坑 springboot打war包

springboot需要jdk1.8 tomcat8.0 第一步 從idea中通過m en install將專案打成war包 第三步 開始報錯unsupported major.minor version 52.0 本地排查 j a version顯示的是jdk1.8,正確 抓耳撓腮中.最終解決 檢...

部署springboot專案

開發完了以後要部署,那麼怎麼部署呢?第一種 jar方式 注意是在springboot target目錄下生成乙個jar檔案 然後直接輸入鏈結就可以訪問了 第二種 war部署 哪種好?最近公司在做一些內部的小型web應用時,為了提高開發效率決定使用springboot,這貨自帶servlet容器,你在...