springboot項(xiàng)目配置logback日志系統(tǒng)的實(shí)現(xiàn)
記錄springboot項(xiàng)目配置logback日志文件管理:
logback依賴jar包
SpringBoot項(xiàng)目配置logback理論上需要添加logback-classic依賴jar包:
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
但是因?yàn)?code>SpringBoot項(xiàng)目默認(rèn)就是使用的就是logback日志系統(tǒng),創(chuàng)建SpringBoot項(xiàng)目時(shí)引入的spring-boot-starter或者spring-boot-starter-web依賴jar包中已經(jīng)包含了spring-boot-starter-logging的依賴,里面同時(shí)包含多種日志系統(tǒng)依賴,如下圖所示:

包括logback和log4j,所以,無需額外添加依賴,直接配置logback.xml就可以了。
此外,如果需要切換為log4j2,那么需要在spring-boot-starter-web依賴中排除springboot自帶的commons‐logging,然后在引入log4j2的依賴jar包,如下所示:
<!--排除 commons‐logging-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>commons‐logging</groupId>
<artifactId>commons‐logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--引入log4j2 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
logback的默認(rèn)配置
前面說到SpringBoot項(xiàng)目默認(rèn)使用logback,那么對(duì)于logback的配置情況,SpringBoot又是如何定義的呢?
首先,SpringBoot會(huì)從resource包下查找logback-test.xml或logback.xml ,如果這兩個(gè)都不存在,則會(huì)調(diào)用BasicConfigurator,創(chuàng)建一個(gè)最小化的基本配置。
最小化配置由一個(gè)關(guān)聯(lián)到根logger的ConsoleAppender組成,默認(rèn)輸出模式為%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n,root logger級(jí)別為DEBUG,所以并不會(huì)生成日志文件,只會(huì)輸出到控制臺(tái)。
創(chuàng)建logback.xml配置文件
通過自定義logback.xml配置文件來控制日志輸出情況,通常我們會(huì)配置三個(gè)日志組件:
- 控制臺(tái)輸出
- 輸出info級(jí)別日志文件
- 輸出error級(jí)別日志文件
以下為logback.xml完整配置
<!-- Logback configuration. See http://logback.qos.ch/manual/index.html -->
<configuration scan="true" scanPeriod="2 seconds">
<!--定義日志文件的存儲(chǔ)地址-->
<property name="LOG_PATH" value="./logs" />
<!-- 控制臺(tái)輸出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化輸出:%d表示日期,%-5level:級(jí)別從左顯示5個(gè)字符寬度,%t表示線程名,%msg:日志消息,%n是換行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level ${PID:-} --- [%t] %logger{50} - %msg%n</pattern>
</encoder>
</appender>
<!-- info級(jí)別日志文件輸出 -->
<appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 日志文件輸出的文件名 -->
<File>${LOG_PATH}/info.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 每日生成日志文件或日志文件大小超出限制后輸出的文件名模板 -->
<fileNamePattern>${LOG_PATH}/info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- 日志文件保留天數(shù) -->
<maxHistory>30</maxHistory>
<!-- 日志文件最大大?。?00MB -->
<maxFileSize>100MB</maxFileSize>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level ${PID:-} --- [%t] %logger{50} - %msg%n</pattern>
</encoder>
</appender>
<!-- error級(jí)別日志文件輸出 -->
<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 日志輸出級(jí)別,優(yōu)先級(jí) > '<root level>' -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
<File>${LOG_PATH}/error.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxHistory>30</maxHistory>
<maxFileSize>100MB</maxFileSize>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level ${PID:-} --- [%t] %logger{50} - %msg%n</pattern>
</encoder>
</appender>
<!-- 默認(rèn)日志輸出級(jí)別 -->
<root level="INFO">
<appender-ref ref="STDOUT" />
<appender-ref ref="INFO_FILE" />
<appender-ref ref="ERROR_FILE" />
</root>
</configuration>
logback配置說明
根節(jié)點(diǎn)configuration
<configuration scan="true" scanPeriod="2 seconds" debug="false">
</configuration>
configuration包含以下三個(gè)屬性:
- scan:配置文件發(fā)生更改時(shí),進(jìn)行重載,默認(rèn)值為true
- scanPeriod:監(jiān)測(cè)配置文件是否有修改的時(shí)間間隔,默認(rèn)值為6000,默認(rèn)單位為毫秒
- debug:打印logback內(nèi)部日志信息,實(shí)時(shí)查看logback運(yùn)行狀態(tài),默認(rèn)值為false
子節(jié)點(diǎn)property:
<property name="LOG_PATH" value="./logs" />
用來定義變量值,包含以下兩個(gè)屬性
- name:變量名稱
- value:變量定義的值
通過property定義的值會(huì)被插入到logger上下文中,可以使${}來使用變量,這里定義了log的保存位置根目錄。
子節(jié)點(diǎn)appender:
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> </appender>
是負(fù)責(zé)寫日志的組件,通過自定義日志組件控制日志輸出的情況,包含以下兩個(gè)屬性:
- name:組件名稱
- class:組件class指定的類名
不同的class,對(duì)應(yīng)不同的功能:
如ch.qos.logback.core.ConsoleAppender會(huì)把日志輸出到控制臺(tái)
ch.qos.logback.core.rolling.RollingFileAppender把日志內(nèi)容輸出到指定文件
File節(jié)點(diǎn):日志文件輸出的文件名
<File>${LOG_PATH}/info.log</File>
filter節(jié)點(diǎn):過濾器,用來指定日志組件的日志輸出級(jí)別,優(yōu)先級(jí)高于root節(jié)點(diǎn)的level。
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
rollingPolicy節(jié)點(diǎn):
滾動(dòng)日志文件配置,涉及日志文件的移動(dòng)和重命名,只有一個(gè)class屬性,用來指定滾動(dòng)策略,這里使用的是ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy
包含以下三個(gè)屬性:
- fileNamePattern:發(fā)生滾動(dòng)時(shí)的日志命名方式
- maxHistory:日志文件的最大保留時(shí)間,超過設(shè)定時(shí)間后會(huì)自動(dòng)刪除
- maxFileSize:每份日志文件的最大限制,超出限制后會(huì)重新生成,并將舊的日志文件按照fileNamePattern設(shè)定的日志命名方式進(jìn)行命名
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxHistory>30</maxHistory>
<maxFileSize>100MB</maxFileSize>
</rollingPolicy>
子節(jié)點(diǎn)encoder
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level ${PID:-} --- [%t] %logger{50} - %msg%n</pattern>
</encoder>
對(duì)記錄事件進(jìn)行格式化,負(fù)責(zé)兩件事,一是把日志信息轉(zhuǎn)換成字節(jié)數(shù)組,二是把字節(jié)數(shù)組寫入到輸出流。
PatternLayoutEncoder 是唯一有用的且默認(rèn)的encoder ,有一個(gè)
子節(jié)點(diǎn)root
根loger,是所有loger的最上級(jí),且只有一個(gè)level節(jié)點(diǎn),用類設(shè)置打印日志的級(jí)別,默認(rèn)值為debug,通常設(shè)置為info,此外還有trace、warn、error、all、off級(jí)別。
子節(jié)點(diǎn)appender-ref的ref屬性指定日志組件名稱,即appender的name屬性值。
使用logback
在yml文件中增加logging.config指定配置文件地址,命名為logback時(shí)可以不需要配置,SpringBoot`會(huì)自動(dòng)查找。
level設(shè)置指定路徑下的日志輸出級(jí)別。
logging:
config: classpath:logback.xml
level:
com:
springboot: debug
如圖所示,項(xiàng)目啟動(dòng)后,訪問接口輸出日志內(nèi)容并生成指定日志文件:

內(nèi)容參考
博客園-ryelqy-logback的使用和logback.xml詳解
到此這篇關(guān)于springboot項(xiàng)目配置logback日志系統(tǒng)的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)springboot配置logback日志系統(tǒng)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
jxl 導(dǎo)出數(shù)據(jù)到excel的實(shí)例講解
下面小編就為大家分享一篇jxl 導(dǎo)出數(shù)據(jù)到excel的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2017-12-12
Mybatis SqlSessionFactory與SqlSession詳細(xì)講解
SqlSessionFactory是MyBatis的核心類之一,其最重要的功能就是提供創(chuàng)建MyBatis的核心接口SqlSession,所以我們需要先創(chuàng)建SqlSessionFactory,為此我們需要提供配置文件和相關(guān)的參數(shù)2022-11-11
JMeter參數(shù)化4種實(shí)現(xiàn)方式(小結(jié))
參數(shù)化是自動(dòng)化測(cè)試腳本的一種常用技巧,可將腳本中的某些輸入使用參數(shù)來代替,JMeter提供了多種參數(shù)化方式,下面就其中常用的4種展開闡述,感興趣的可以來了解一下2021-12-12
教你使用eclipse?搭建Swt?環(huán)境的全過程
本文給大家分享使用eclipse?搭建Swt?環(huán)境的全過程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-12-12
java WebSocket的實(shí)現(xiàn)以及Spring WebSocket示例代碼
本篇文章主要介紹了java WebSocket的實(shí)現(xiàn)以及Spring WebSocket,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-01-01
java?byte數(shù)組轉(zhuǎn)String的幾種常用方法
在Java中數(shù)組是一種非常常見的數(shù)據(jù)結(jié)構(gòu),它可以用來存儲(chǔ)多個(gè)相同類型的數(shù)據(jù),有時(shí)候,我們需要將數(shù)組轉(zhuǎn)換為字符串,以便于輸出或者傳遞給其他方法,這篇文章主要給大家介紹了關(guān)于java?byte數(shù)組轉(zhuǎn)String的幾種常用方法,需要的朋友可以參考下2024-09-09
Java postgresql數(shù)組字段類型處理方法詳解
這篇文章主要介紹了Java postgresql數(shù)組字段類型處理方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10
Spring事務(wù)失效的場(chǎng)景梳理總結(jié)
實(shí)際項(xiàng)目開發(fā)中,如果涉及到多張表操作時(shí),為了保證業(yè)務(wù)數(shù)據(jù)的一致性,大家一般都會(huì)采用事務(wù)機(jī)制,好多小伙伴可能只是簡(jiǎn)單了解一下,遇到事務(wù)失效的情況,便會(huì)無從下手,下面這篇文章主要給大家介紹了關(guān)于Spring事務(wù)失效場(chǎng)景的相關(guān)資料,需要的朋友可以參考下2023-02-02
源碼分析Spring?中?@Qualifier?注解基本用法
這篇文章主要介紹了源碼分析Spring?中?@Qualifier?注解基本用法,在源碼分析的過程中,也?GET?到?Spring?許多新的玩法,感興趣的小伙伴趕緊去試試吧2023-08-08

