技術/楊33
一、SpringBoot的日誌框架選用的什麼技術?
SpringBoot的日誌框架選用的是目前市面上最流行的SLF4j+Logback的組合,SLF4j負責日誌門面,Logback負責日誌實現。
視頻解釋上面的圖譜:
播放
暫停
進入全屏
退出全屏
00:00
00:00
重播請
刷新
試試二、如何統一項目中所有的日誌到SLF4j?
項目中別的框架使用了各種日誌,並非SLF4j,那麼就需要統一日誌,最後共同使用SLF4j進行日誌輸出。
統一SLF4j日誌的方法為:
- 將項目中其他日誌框架先排除出去。
- 用中間包來替換原有的日誌框架。
- 導入SLF4j其他的實現。
三、SpringBoot的日誌包依賴關係
1、在IEDA開發工具下查看依賴包關係的方法:
- 打開pom.xml文件
- 空白處鼠標右鍵,選擇Diagrams--->Show Dependencies
2、找到日誌包的依賴網
<code>spring-boot-starter-logging/<code>
SpringBoot底層使用的是SLF4j+Logback組合的進行日誌記錄。
3、pom.xml中引入其他框架的依賴,一定要移除掉這個框架自帶默認的日誌依賴,否則會引起jar包衝突。
比如Spring 框架自帶的日誌框架commons-logging,那麼如果在SpringBoot項目中依賴Spring,就需要移除掉這個默認的日誌。移除標籤
<code><
dependency
><
groupId
>org.springframeworkgroupId
><
artifactId
>spring-coreartifactId
><
version
>3.2.3.RELEASEversion
><
exclusions
><
exclusion
><
groupId
>commons-logging
groupId
><
artifactId
>commons-loggingartifactId
>exclusion
>exclusions
>dependency
>/<code>
四、SpringBoot默認日誌級別
1、日誌級別由低到高分別是trace
寫一個輸出日誌級別的代碼如下:
<code>package
com.test.demo.springbootdemo01;import
org.junit.jupiter.api.Test;import
org.slf4j.Logger;import
org.slf4j.LoggerFactory;import
org.springframework.boot.test.context.SpringBootTest;class
SpringbootDemo01ApplicationTests
{ Logger logger = LoggerFactory.getLogger(getClass());void
contextLoads
()
{ logger.trace("trace日誌"
); logger.debug("trace日誌"
); logger.info("info日誌"
); logger.warn("warn日誌"
); logger.error("error日誌"
); } }/<code>
結果,SpringBoot默認的日誌級別是info,比info級別高的都會生效,級別低的就被過濾掉了。
輸出級別為:
<code>2020-04-19
17:40
:45.968
INFO
11604---
[ main]
c
.t
.d
.s
.SpringbootDemo01ApplicationTests
:info
日誌 2020-04-19
17:40
:45.968
WARN
11604---
[ main]
c
.t
.d
.s
.SpringbootDemo01ApplicationTests
:warn
日誌 2020-04-19
17:40
:45.968
ERROR
11604---
[ main]
c
.t
.d
.s
.SpringbootDemo01ApplicationTests
:error
日誌/<code>
2、SpringBoot如何修改默認的日誌級別呢?
application.yml配置文件這麼寫:
<code>logging
:level
: com.test.demo
: warn/<code>
或者使用application.properties配置文件這麼寫:
<code>logging.level.com.test.demo
=warn/<code>
這樣就可以將項目的日誌級別寫改為warn。
3、日誌的其他設置
- 設置指定日誌存放的文件夾,文件名默認是spring.log
- 設置日誌輸出格式
<code>d表示日期
thread表示線程名
-5level表示級別從左顯示5個字符寬度
logger{50}表示logger名字最長50個字符,否則按句點分隔
msg表示日誌消息
n表示換行符
/<code>
application.yml配置文件代碼如下:
<code>logging:
path:
/spring/logs
pattern:
console:
'%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n'
file:
'%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n'
/<code>
或者使用application.properties配置文件這麼寫:
<code>logging.path=/spring/logs
logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5
level %logger{50}
- %msg%n logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5
level %logger{50}
- %msg%n/<code>
需要注意的是,設置輸出日誌時,因為yml配置文件,開頭不能使用%符號,所以必須在首尾加上單引號。
五、自己實現項目日誌的配置文件,不使用SpringBoot默認的配置文件
需要在項目下添加logback的配置文件logback-spring.xml或者logback.xml。
推薦使用logback-spring.xml,因為加上spring的後綴後,可以使用SpringBoot的高級功能,在配置文件中添加指定環境的配置。
<code> "dev"> %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5
level %logger{50}
- %msg%n</pattern> Profile> "!dev"
> %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5
level %logger{50}
- %msg%n</pattern> Profile>
/<code>
- 結合application.yml、application-dev.yml實現logback-spring.xml的編寫
在application.yml中添加激活dev的配置
<code>spring
:profiles
:active
: dev/<code>
在application-dev.yml中添加日誌級別和日誌存放的文件夾
<code>server:
port:
8080
logging:
path:
/spring/logs
level:
com.test.demo:
debug
config:
classpath:logback-spring.xml
/<code>
最後編寫logback-spring.xml文件
<code><
configuration
><
springProperty
scope
="context"
name
="logPath"
source
="logging.path"
/><
appender
name
="STDOUT"
class
="ch.qos.logback.core.ConsoleAppender"
><
encoder
class
="ch.qos.logback.core.encoder.LayoutWrappingEncoder"
><
layout
class
="com.test.demo.TestLayout"
><
appName
>testappName
>layout
>encoder
>appender
><
appender
name
="FILE"
class
="ch.qos.logback.core.rolling.RollingFileAppender"
><
File
>${logPath}.logFile
><
filter
class
="com.test.demo.filter.LogEventFilter"
/><
encoder
class
="ch.qos.logback.core.encoder.LayoutWrappingEncoder"
><
layout
class
="com.test.demo.TestLayout"
><
appName
>testappName
>layout
>encoder
><
rollingPolicy
class
="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"
><
fileNamePattern
>${logPath}_%d{yyyy-MM-dd}.logfileNamePattern
><
MaxHistory
>5MaxHistory
>rollingPolicy
>appender
><
appender
name
="fileLevel"
class
="ch.qos.logback.classic.AsyncAppender"
><
appender-ref
ref
="FILE"
/>appender
><
root
><
level
value
="DEBUG"
/><
appender-ref
ref
="fileLevel"
/>root
>configuration
>/<code>
作者:楊33,北京互聯網公司在職Java開發,專注分享寫作乾貨。歡迎關注我,期待你的點贊評論。