Springboot日志框架Logback的使用及配置
點擊上方藍色字體,選擇“標星公眾號”
優(yōu)質文章,第一時間送達
兩種配置方式
application.properties或 application.yml (系統(tǒng)層面)
logback-spring.xml(自定義文件方式)
第一種方式比較簡單,可做的事情也比較簡單,比如:只能配置日志文件的輸出路徑、日志文件的格式、日志的級別等
第二種方式比較復雜,對日志的處理比較好,生產(chǎn)上推薦這種,運行維護好。如有以下需求:
1、區(qū)分 debug、info、error 等類型的日志,并分別輸出到不同的日志文件。
2、對日志文件進行維護,如每天產(chǎn)生一個日志文件,并設置日志文件的大小和保留天數(shù)等。
方式一:application.properties或 application.yml
#日志級別 trace<debug<info<warn<error<fatal,默認級別為info,即默認打印info及其以上級別的日志
#logging.level設置日志級別,后面跟生效的區(qū)域,比如root表示整個項目,也可以設置為某個包下,也可以具體到某個類名(日志級別的值不區(qū)分大小寫)
#logging.level.root=info就是默認的情況
logging:
pattern: #配置日志輸出格式
# console: "%d{yyyy-MM-dd HH:mm:ss.SSS} %clr(%-5level){green} %clr(${PID:- }){magenta} [ %clr(%thread){red}] --- %clr(%logger{36}){blue} : %msg%n" #配置控制臺的日志輸出的格式,默認輸出格式
file: "%d{yyyy-MM-dd} === [%thread] === %-5level === %logger{50} === - %msg%n" #配置控制臺的日志輸出的格式
# 日志輸出格式:
# %d表示日期時間,
# %thread表示線程名,
# %-5level:級別從左顯示5個字符寬度
# %logger{50} 表示logger名字最長50個字符,否則按照句點分割。
# %msg:日志消息,
# %n是換行符
# %clr(對項){顏色名} 配置該項的顏色 #只在控制臺有作用
# ${PID:- } 進程號
# %d{yyyy-MM-dd HH:mm:ss.SSS} %clr(%-5level){green} %clr(${PID:- }){magenta} [ %clr(%thread){red}] --- %clr(%logger{36}){blue} : %msg%n #系統(tǒng)默認配置
file: #配置日志輸出的文件
#這兩個選一個配置就可以了,一起配置的話,name的生效。系統(tǒng)每次啟動都會在原來的日志文件上追加數(shù)據(jù)
# name: F:/ideaWorkSpace/spring-boot.log
path: F:/ideaWorkSpace/log/ #會在log目錄下生成一個spring.log的日志文件,相對路徑為項目目錄下
level: # 配置輸出日志級別
root: INFO #設置整個項目的日志輸出級別默認info
com.bs.agricultural_share_platform.dao: DEBUG # 設置該包下的日志輸出級別為 DEBUG,輸出執(zhí)行的sql

該方式,日志都寫在一個文件里面,不方便維護。

方式二:logback-spring.xml文件配置
在resources目錄下添加logback-spring.xml配置文件

配置文件內(nèi)容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!-- 日志級別從低到高分為TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果設置為WARN,則低于WARN的信息都不會輸出 -->
<!-- scan:當此屬性設置為true時,配置文件如果發(fā)生改變,將會被重新加載,默認值為true -->
<!-- scanPeriod:設置監(jiān)測配置文件是否有修改的時間間隔,如果沒有給出時間單位,默認單位是毫秒。當scan為true時,此屬性生效。默認的時間間隔為1分鐘。 -->
<!-- debug:當此屬性設置為true時,將打印出logback內(nèi)部日志信息,實時查看logback運行狀態(tài)。默認值為false。 -->
<configuration debug="true">
<!-- 彩色日志 -->
<!-- 彩色日志依賴的渲染類 -->
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
<conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
<!-- 定義屬性 -->
<!-- name的值是變量的名稱,value的值時變量定義的值。通過定義的值會被插入到logger上下文中。定義變量后,可以使“${}”來使用變量。 -->
<property name="log.path" value="F:/ideaWorkSpace/log" />
<!-- 彩色日志格式 -->
<!-- 控制臺日志輸出-->
<property name="CONSOLE_LOG_PATTERN" value="%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(%5p) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n%wex"/>
<!-- <property name="CONSOLE_LOG_PATTERN" value="[%date{yyyy-MM-dd HH:mm:ss.SSS}][%-4level][%line][%thread] reqLog:[%X{reqLog}] call:[%logger][%method] parameter:%msg%n"/>-->
<!-- 日志文件日志輸出-->
<property name="FILE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %5p ${PID:- } --- [%t] %-40.40logger{39} : %m%n%wex"/>
<!--多環(huán)境的日志輸出-->
<!--根據(jù)不同環(huán)境(prd:生產(chǎn)環(huán)境,test:測試環(huán)境,dev:開發(fā)環(huán)境)來定義不同的日志輸出,-->
<!--在 logback-spring.xml中使用 springProfile 節(jié)點來定義,方法如下:-->
<springProfile name="prd">
<property name="LOG_HOME" value="F:/ideaWorkSpace/log" />
</springProfile>
<springProfile name="test">
<property name="LOG_HOME" value="F:/ideaWorkSpace/log" />
</springProfile>
<springProfile name="dev">
<property name="LOG_HOME" value="F:/ideaWorkSpace/log" />
<!-- <logger name="com.bs.agricultural_share_platform.dao" level="debug"/>-->
</springProfile>
<!--
<logger>用來設置某一個包或者具體的某一個類的日志打印級別、
以及指定<appender>。<logger>僅有一個name屬性,
一個可選的level和一個可選的addtivity屬性。
name:用來指定受此logger約束的某一個包或者具體的某一個類。
level:用來設置打印級別,大小寫無關:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,
還有一個特俗值INHERITED或者同義詞NULL,代表強制執(zhí)行上級的級別。
如果未設置此屬性,那么當前l(fā)ogger將會繼承上級的級別。
addtivity:是否向上級logger傳遞打印信息。默認是true。
-->
<!--
使用mybatis的時候,sql語句是debug下才會打印,而這里我們只配置了info,所以想要查看sql語句的話,有以下兩種操作:
第一種把<root level="info">改成<root level="DEBUG">這樣就會打印sql,不過這樣日志那邊會出現(xiàn)很多其他消息
第二種就是單獨給dao下目錄配置debug模式,代碼如下,這樣配置sql語句會打印,其他還是正常info級別:
-->
<!--
root節(jié)點是必選節(jié)點,用來指定最基礎的日志輸出級別,只有一個level屬性
level:用來設置打印級別,大小寫無關:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,
不能設置為INHERITED或者同義詞NULL。默認是DEBUG
可以包含零個或多個元素,標識這個appender將會添加到這個logger。
-->
<!--輸出到控制臺-->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<!--此日志appender是為開發(fā)使用,只配置最底級別,控制臺輸出的日志級別是大于或等于此級別的日志信息-->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<!-- 設置debug,在控制臺輸出執(zhí)行的sql-->
<level>debug</level>
</filter>
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
</appender>
<!--debug 級別的日志-->
<!-- 按照每天生成日志文件 -->
<appender name="DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在記錄的日志文件的路徑及文件名,正在的 -->
<file>${log.path}/log_debug.log</file>
<!-- 設置此日志文件只記錄debug級別的 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>DEBUG</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<!--日志文件輸出格式-->
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
<charset>UTF-8</charset>
</encoder>
<!-- 日志記錄器的滾動策略,按日期,按大小記錄 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件輸出的文件名-->
<fileNamePattern>${LOG_HOME}/info.%d{yyyy-MM-dd}.log</fileNamePattern>
<!--日志文件保留天數(shù)-->
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<!--日志文件最大的大小-->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MB</MaxFileSize>
</triggeringPolicy>
</appender>
<!--info 級別的日志-->
<!-- 按照每天生成日志文件 -->
<appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在記錄的日志文件的路徑及文件名,正在的 -->
<file>${log.path}/log_info.log</file>
<!-- 設置此日志文件只記錄info級別的 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<!--日志文件輸出格式-->
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
<!-- 日志記錄器的滾動策略,按日期,按大小記錄 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件輸出的文件名-->
<fileNamePattern>${LOG_HOME}/info.%d{yyyy-MM-dd}.log</fileNamePattern>
<!--日志文件保留天數(shù)-->
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<!--日志文件最大的大小-->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MB</MaxFileSize>
</triggeringPolicy>
</appender>
<!--WARN 級別的日志-->
<appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在記錄的日志文件的路徑及文件名,正在的 -->
<file>${log.path}/log_warn.log</file>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>WARN</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/warn.%d{yyyy-MM-dd}.log</fileNamePattern>
<MaxHistory>30</MaxHistory>
</rollingPolicy>
</appender>
<!--ERROR 級別的日志-->
<appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在記錄的日志文件的路徑及文件名,正在的 -->
<file>${log.path}/log_error.log</file>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/error.%d{yyyy-MM-dd}.log</fileNamePattern>
<MaxHistory>30</MaxHistory>
</rollingPolicy>
</appender>
<!-- 系統(tǒng)日志輸出級別 ,ref 的名字對應上面appender標簽的name名稱-->
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="INFO"/>
<appender-ref ref="WARN"/>
<appender-ref ref="ERROR"/>
<appender-ref ref="DEBUG"/>
</root>
</configuration>
Springboot會在目錄下自動生成對應類型的日志文件:


其它問題
1、有些人配置文件里面有看到 layout(如下例子),不要慌,因為encoder 和 layout 在作用上沒有本質區(qū)別,但是自0.9.19版本之后,極力推薦使用encoder。

2、為什么Spring Boot推薦使用logback-spring.xml來替代logback.xml來配置logback日志的問題分析?
原因是:logback.xml加載早于application.properties,所以如果你在logback.xml使用了變量時,而恰好這個變量是寫在application.properties時,那么就會獲取不到,只要改成logback-spring.xml就可以解決。
拓展:使用Slf4j輸出日志
1、添加依賴
<!-- Slf4j日志-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.10</version>
</dependency>
2、Idea添加lombok插件

3、添加注解并使用
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
@MapperScan(basePackages = "com.bs.agricultural_share_platform.dao")
@Slf4j
public class AgriculturalSharePlatformApplication {
public static void main(String[] args) {
log.info("啟動項目了");
SpringApplication.run(AgriculturalSharePlatformApplication.class, args);
}
}

————————————————
版權聲明:本文為CSDN博主「淺議永久」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權協(xié)議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:
https://blog.csdn.net/weixin_41844824/article/details/114463474
粉絲福利:Java從入門到入土學習路線圖
??????

??長按上方微信二維碼 2 秒
感謝點贊支持下哈 
