(三)SpringBoot項目的日誌配置

技術/楊33

(三)SpringBoot項目的日誌配置

SLF4j+Logback的組合

一、SpringBoot的日誌框架選用的什麼技術?

SpringBoot的日誌框架選用的是目前市面上最流行的SLF4j+Logback的組合,SLF4j負責日誌門面,Logback負責日誌實現。

(三)SpringBoot項目的日誌配置

日誌門面SLF4j框架圖譜

視頻解釋上面的圖譜:

播放

暫停

進入全屏

退出全屏

00:00

00:00

重播

刷新

試試

二、如何統一項目中所有的日誌到SLF4j?

項目中別的框架使用了各種日誌,並非SLF4j,那麼就需要統一日誌,最後共同使用SLF4j進行日誌輸出。

統一SLF4j日誌的方法為:

  • 將項目中其他日誌框架先排除出去。
  • 用中間包來替換原有的日誌框架。
  • 導入SLF4j其他的實現。
(三)SpringBoot項目的日誌配置

三、SpringBoot的日誌包依賴關係

1、在IEDA開發工具下查看依賴包關係的方法:

  • 打開pom.xml文件
  • 空白處鼠標右鍵,選擇Diagrams--->Show Dependencies
(三)SpringBoot項目的日誌配置

2、找到日誌包的依賴網

<code>spring-boot-starter-logging/<code>
(三)SpringBoot項目的日誌配置

底層日誌包依賴關係

SpringBoot底層使用的是SLF4j+Logback組合的進行日誌記錄。

3、pom.xml中引入其他框架的依賴,一定要移除掉這個框架自帶默認的日誌依賴,否則會引起jar包衝突。

比如Spring 框架自帶的日誌框架commons-logging,那麼如果在SpringBoot項目中依賴Spring,就需要移除掉這個默認的日誌。移除標籤

<code>

<

dependency

>

<

groupId

>

org.springframework

groupId

>

<

artifactId

>

spring-core

artifactId

>

<

version

>

3.2.3.RELEASE

version

>

<

exclusions

>

<

exclusion

>

<

groupId

>

commons-logging

groupId

>

<

artifactId

>

commons-logging

artifactId

>

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

>

test

appName

>

layout

>

encoder

>

appender

>

<

appender

name

=

"FILE"

class

=

"ch.qos.logback.core.rolling.RollingFileAppender"

>

<

File

>

${logPath}.log

File

>

<

filter

class

=

"com.test.demo.filter.LogEventFilter"

/>

<

encoder

class

=

"ch.qos.logback.core.encoder.LayoutWrappingEncoder"

>

<

layout

class

=

"com.test.demo.TestLayout"

>

<

appName

>

test

appName

>

layout

>

encoder

>

<

rollingPolicy

class

=

"ch.qos.logback.core.rolling.TimeBasedRollingPolicy"

>

<

fileNamePattern

>

${logPath}_%d{yyyy-MM-dd}.log

fileNamePattern

>

<

MaxHistory

>

5

MaxHistory

>

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開發,專注分享寫作乾貨。歡迎關注我,期待你的點贊評論。


分享到:


相關文章: