spring boot配置logback日志
spring boot配置logback日志
在上一篇spring boot入門里提過,Spring Boot默認的日志打印是logback,所以配置logback日志會很簡單,但是也有注意的地方。
本次配置日志的需求
通過上一篇的介紹,知道,Spring boot默認日志為logback,所以只要引入如下依賴,就會自動引入logback日志的jar包。
<!-- Spring Boot Web 依賴 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>單獨spring 項目使用 logback日志需要的jar包如下:
<dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.1.9</version> </dependency><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-core</artifactId><version>1.1.9</version> </dependency> <!--因logback日志需要與slf4j配合使用,如下的jar包需要引入--> <dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.22</version> </dependency>1234567891011121314151617再說一遍,spring boot項目不需要引入上邊的三個jar包,已經自動引入了。
以下是配置步驟:
- logback日志的在spring boot里的配置需要在src/main/resources下,application.properties同級,放一個logback的xml文件,一般起名字為logback-spring.xml,網上很多人建議起名字為這個,我沒看出有什么區別,所以我就按照他們講的配置了,以免出現不必要的錯誤。
- logback-spring.xml按照我的需求配置成控制臺打印和文件打印,直接將以下內容復制,并命名成該名字,放到上邊說的位置中,具體的內容如下:
其中,你們應該注意到里邊有很多的“${}”形式的變量這其實是logback日志的默認名稱,比如${LOG_PATH},${CONSOLE_LOG_PATTERN},${FILE_LOG_PATTERN} 等,這些變量只需要在spring boot的默認配置文件,application.properties里添加如下配置即可:
1)以下是日志輸出的位置,注意在logback-spring.xml里用LOG_PATH才能獲取到值
logging.path=d:/logs/springBoot2)以下是指向日志配置文件的位置
logging.config=classpath:logback-spring.xml3)以下是控制臺打印日志格式設置,注意在logback-spring.xml里用CONSOLE_LOG_PATTERN才能獲取
logging.pattern.console=[%d{yyyy-MM-dd HH:mm:ss}] -- [%-5p]: [%c] -- %m%n4)以下是文件打印日志格式設置,注意在logback-spring.xml里用FILE_LOG_PATTERN才能獲取到
logging.pattern.file=[%d{yyyy-MM-dd HH:mm:ss}] -- [%-5p]: [%c] -- %m%n添加上邊四個配置就對日志配置完了。多說一句,為什么在application.properties文件里的日志配置名字和${} 里不同呢,這就需要看logback-spring.xml里最上邊的base.xml引入,找到這個文件就明白了。它的位置在以下jar包里:
spring-boot-1.5.1.RELEASE.jar找到如下位置:
org.springframework.boot.logging.logback就會看到里邊有base.xml、console-appender.xml等等四個xml文件,打開file.appender.xml如下:
也就是說spring boot里的日志配置文件已經將其寫死,但是在application.properties里又要按照其要求寫,所以我感覺這也是spring boot的缺點,太多隱藏的配置了,如果知道,那很簡單了,但是不知道,就會浪費很多的時間,多配置很多的無用東西。
通過這四個spring boot的日志xml文件,也應該知道為什么在上一篇入門spring boot里沒有配置日志,卻打印日志的原因,其內在自己的日志應該就是這個。
另外說一下日志的打印控制,比如有一些打印日志我不想要,就可以通過配置logback-spring.xml文件,添加一個logger標簽即可。比如如下:
[2021-06-05 19:14:23] -- [INFO ]: [org.I0Itec.zkclient.ZkClient] -- zookeeper state changed (SyncConnected) [2021-06-05 19:14:23] -- [DEBUG]: [org.I0Itec.zkclient.ZkClient] -- Leaving process event [2021-06-05 19:14:23] -- [DEBUG]: [org.I0Itec.zkclient.ZkClient] -- State is SyncConnected123以上三條日志我現在不需要讓它打印了,那就需要額外配置了,因為它們來自于org.I0Itec.zkclient.ZkClient 類,并且打印的內容分別是DEBUG和INFO級別,日志打印只要將該類的日志打印級別調高(日志從低到高為 TRACE、DEBUG、INFO、WARN、ERROR),因此只要將該類的日志級別配置為WARN以上,就不會打印上邊的內容了。配置方法如下:
<logger name="org.I0Itec.zkclient.ZkClient" additivity="false"><level value="ERROR" /><appender-ref ref="STDOUT" /><appender-ref ref="errorAppender" /> </logger>其中:
name表示日志的打印位置,從上邊可以看出是來自該類。
additivity設置為false表示該日志打印設置(控制臺打印還是文件打印等具體設置)不會向根root標簽傳遞,也就是說該logger里怎么設置的那就會怎么打印,跟root無關。
level value=’error’表示將該類日志級別設置為error級才會打印。
最后兩行表示error級時會打印控制臺和error文件同時打印日志。
配置logback日志的注意點:
logback和log4j最好不要放在一起,會沖突,最主要的jar包是slf4j-log4j12.jar 和 logback-classic.jar 這兩個jar包的設計簡直是反人類,有一個類,這兩個都會有,只要這兩個jar包同時引入,就會看到啟動spring boot會有一串沖突的紅字,因此,只要用logback日志,就需要特別注意除了排除log4j主要jar包,別忘了排除slf4j-log4j12.jar ,具體的排除方法,可以選擇maven項目的pom.xml,在右邊找到Dependency Hierarchy,然后找到要排除的jar包,右擊選擇Exclude Maven Artifact,然后保存即可。
logback的logback-spring.xml文件如果你沒有按照我這么寫,在application.properties文件里就不需要配置全部的4行內容,如果直接復制的我的,那就需要配置上了。
logback貌似沒有log4j常用,很多的第三方jar包都使用的log4j,比如aliba的dubbo和zookeeper都是默認的log4j,所以你在引入第三方的jar時,又使用的是logback,就特別注意是不是它們默認使用的log4j,如果是的話,有slf4j-log4j12.jar 就排除即可。后邊說spring boot+dubbo時會再說。
總結
以上是生活随笔為你收集整理的spring boot配置logback日志的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java基础day10
- 下一篇: Java基础day11