溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用SpringBoot集成slf4j日志配置

發(fā)布時間:2021-09-29 09:03:20 來源:億速云 閱讀:626 作者:小新 欄目:開發(fā)技術

這篇文章主要介紹如何使用SpringBoot集成slf4j日志配置,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

1、slf4j概述

slf4j,即(Simple Logging Facade for Java,簡單門面日志)。它是對所有日志框架制定的一種規(guī)范、標準、接口,并不是一個框架的具體的實現(xiàn),它只服務于各種各樣的日志系統(tǒng)。

slf4j提供了統(tǒng)一的記錄日志的接口,對不同日志系統(tǒng)的具體實現(xiàn)進行了抽象化,只要按照其提供的方法記錄即可,最終日志的格式、記錄級別、輸出方式等通過綁定具體的日志系統(tǒng)來實現(xiàn)。在項目中使用了slf4j記錄日志,并且綁定了log4j(pom.xml中配置了相應的jar包依賴),則日志會以log4j的風格輸出;后期需要改為以logback的風格輸出日志,只需要將jar包log4j替換成logback即可,根本不需要修改日志文件的代碼。

首先看下日志打印,如下,在啟動類中引入Logger日志記錄:

@SpringBootApplication
public class SpringbootSlf4jApplication {
 
    private static final Logger logger = LoggerFactory.getLogger(SpringbootSlf4jApplication.class);
 
    public static void main(String[] args) {
        logger.info("===============項目啟動了===============");
        SpringApplication app = new SpringApplication(SpringbootSlf4jApplication.class);
        app.run(args);
        logger.info("===============啟動成功了===============");
    }
}

日志信息:

2020-03-21 11:28:18.017 [main] INFO  com.hl.magic.slf4j.SpringbootSlf4jApplication - ===============項目啟動了===============
2020-03-21 11:28:18.447 [main] INFO  com.hl.magic.slf4j.SpringbootSlf4jApplication - Starting SpringbootSlf4jApplication on DESKTOP-V8RSTKO with PID 17476
2020-03-21 11:28:18.447 [main] DEBUG com.hl.magic.slf4j.SpringbootSlf4jApplication - Running with Spring Boot v2.1.8.RELEASE, Spring v5.1.9.RELEASE
2020-03-21 11:28:18.447 [main] INFO  com.hl.magic.slf4j.SpringbootSlf4jApplication - No active profile set, falling back to default profiles: default
2020-03-21 11:28:19.077 [main] INFO  o.s.boot.web.embedded.tomcat.TomcatWebServer - Tomcat initialized with port(s): 8080 (http)
2020-03-21 11:28:19.087 [main] INFO  org.apache.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-8080"]
2020-03-21 11:28:19.097 [main] INFO  org.apache.catalina.core.StandardService - Starting service [Tomcat]
2020-03-21 11:28:19.097 [main] INFO  org.apache.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/9.0.24]
2020-03-21 11:28:19.157 [main] INFO  o.a.c.core.ContainerBase.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext
2020-03-21 11:28:19.157 [main] INFO  org.springframework.web.context.ContextLoader - Root WebApplicationContext: initialization completed in 680 ms
2020-03-21 11:28:19.287 [main] INFO  o.s.scheduling.concurrent.ThreadPoolTaskExecutor - Initializing ExecutorService 'applicationTaskExecutor'
2020-03-21 11:28:19.387 [main] INFO  org.apache.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-8080"]
2020-03-21 11:28:19.397 [main] INFO  o.a.c.core.ContainerBase.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet'
2020-03-21 11:28:19.397 [main] INFO  org.springframework.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet'
2020-03-21 11:28:19.407 [main] INFO  org.springframework.web.servlet.DispatcherServlet - Completed initialization in 10 ms
2020-03-21 11:28:19.410 [main] INFO  o.s.boot.web.embedded.tomcat.TomcatWebServer - Tomcat started on port(s): 8080 (http) with context path ''
2020-03-21 11:28:19.410 [main] INFO  com.hl.magic.slf4j.SpringbootSlf4jApplication - Started SpringbootSlf4jApplication in 1.323 seconds (JVM running for 2.024)
2020-03-21 11:28:19.410 [main] INFO  com.hl.magic.slf4j.SpringbootSlf4jApplication - ===============啟動成功了===============

getLogger(xxxxxxx.class);這個方法將當前所在的類作為入?yún)鬟f,輸出日志就會顯示對應的xxx類名。這樣聲明的好處就是方便定位日志,準確編寫class信息能夠提供快速定位日志的效率。

然鵝,SpringBoot內(nèi)部雖然提供了slf4j,但是日志記錄是需要根據(jù)項目實地需要進行配置后,才能發(fā)揮它的最大功效。OK,接下來一起來了解下SpringBoot項目集成slf4j日志的配置。

2、pom.xml的日志依賴

pom.xml中日志依賴配置如下:

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.30</version>
</dependency>
    <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.7.30</version>
</dependency>

3、application.yml的日志配置

SpringBoot框架內(nèi)部已經(jīng)集成slf4j,在使用時,根據(jù)項目實地需要,還是須對slf4j進行指定配置。

application.yml文件是SpringBoot的一個及其重要、核心的配置文件。yml 文件的層次感較強且直觀,但對格式要求比較高,英文冒號后面必須要有一個空格,如果換行配置子項,須定格輸入兩個空格后再進行配置,否則項目估計無法啟動,而且也不報錯。本文測試項目的application.yml中日志配置如下:

logging:
  config: /HL/IdeaProjects/SpringBoot-Item/springboot-slf4j/src/main/resources/logback.xml
  level:
    com.hl.magic: trace

注意:

【1】這里logback.xml的配置不同于一般日志配置;

因為在單獨的一個SpringBoot工程中,配置config標簽處為:locbak.xml即可;

這里在SpringBoot工程的一個子Module中集成日志配置,因此config標簽處,設置為絕對路徑。

【2】logging.config是用來指定項目啟動的時候,讀取哪個配置文件,這里指定的是日志配置文件,即子module項目根路徑下的 logback.xml文件,該文件是日志的主要配置信息。

【3】level用來配置指定包的路徑下應用程序的日志記錄,及其日志級別。

logging.level用來指定具體的包中應用程序日志的輸出級別。上面的配置表示com.hl.magic包下的所有日志輸出級別為 trace,會將操作數(shù)據(jù)庫的 sql 打印出來,開發(fā)時設置成 trace 方便定位問題,在生產(chǎn)環(huán)境上,將這個日志級別再設置成 error 級別即可。

日志常用的五個級別,根據(jù)嚴重程度由低到高,依次為:debug(調(diào)試 ) < info(消息) < warn(警告) < error(錯誤) < fatal(嚴重錯誤)。通??梢愿鶕?jù)實際所需要的顆粒度的大小選擇其中的幾個,當前常用debug,info,warn,error4個級別。

4、logback.xml配置文件定義

在引入日志配置后,需要制定日志的配置文件內(nèi)容,這樣系統(tǒng)運行后,根據(jù)定制化需求才能輸出我們所需的指定日志記錄信息。

本文測試用例的日志配置內(nèi)容logback.xml文件,詳細內(nèi)容如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
    <!--定義日志文件的存儲地址 勿在 LogBack 的配置中使用相對路徑-->
    <property name="LOG_HOME" value="/HL/IdeaProjects/SpringBoot-Item/springboot-slf4j/log"/>
    <!-- 定義日志格式  -->
    <property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] [%thread] [%-30.30logger{30}] %msg%n"/>
    <!-- 控制臺輸出 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日志消息,%n是換行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
    </appender>
    <!-- 按照每天生成日志文件 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件輸出的文件名-->
            <FileNamePattern>${LOG_HOME}/SpringBoot-Slf4j_%d{yyyy-MM-dd}.log</FileNamePattern>
            <!--日志文件保留天數(shù)-->
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日志消息,%n是換行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
        <!--日志文件最大的大小-->
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>10MB</MaxFileSize>
        </triggeringPolicy>
    </appender>
 
    <!-- 日志輸出級別 -->
    <logger name="org.springframework" level="INFO"/>
    <logger name="com.hl.magic" level="INFO"/>
    <root level="INFO">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE"/>
    </root>
</configuration>

 有上邊可以看出,我們可以輕松的在logback.xml中定義日志輸出的格式、路徑、控制臺輸出格式、文件大小、保存時長等內(nèi)容。接下來,就這些內(nèi)容進行分析。

5、logback.xml配置文件解析

5.1 定義日志的存儲路徑

logback.xml文件中日志存儲路徑定義:

<!--定義日志文件的存儲地址 勿在 LogBack 的配置中使用相對路徑-->
<property name="LOG_HOME" value="/HL/IdeaProjects/SpringBoot-Item/springboot-slf4j/log"/>

分析:

首先,定義日志的名稱:LOG_HOME;

其次,設置輸出value定義為日志的存儲路徑,日志都會存儲在該路徑下。

注意:這里勿在logback文件中使用相對路徑,不管是 windows 系統(tǒng)還是 Linux 系統(tǒng),日志存儲的路徑必須要是絕對路徑。

5.2 定義日志的輸出格式

<!-- 定義日志格式  -->
<property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] [%thread] [%-30.30logger{30}] %msg%n"/>

分析:

 首先,定義日志格式的名稱:LOG_PATTERN

其次,設置日志的具體格式value。

"%d" 表示日期(也可以使用"%date");

"%-5level" 表示級別從左顯示5個字符寬度;

"%thread" 表示線程名;

"%-30.30logger{30}"  表示如果logger的名稱小于30,就“-”指定左對齊;如果其名稱長于30字符,就從左邊較遠輸出的字符截掉,保持logger的名字長度最終限制為30個字符;

"%msg" 表示日志消息,`%n` 是換行符。

5.3 定義控制臺輸出

<!-- 定義控制臺輸出 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        <!-- 變量引入  -->
        <pattern>${LOG_PATTERN}</pattern>
            
        <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日志消息,%n是換行符-->
        <!-- <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>-->
    </encoder>
</appender>

分析:

使用 <appender>標簽設置控制臺輸出(`class="ch.qos.logback.core.ConsoleAppender"`)的配置,定義為 “CONSOLE”。使用引入變量的方式: <pattern>${LOG_PATTERN}</pattern>引進來即可。引入上面定義好的輸出格式(LOG_PATTERN)來輸出

這里,也可以直接配置格式化輸出結果的方式,不過體力工作。

5.4 定義日志相關參數(shù)

在<appender>標簽內(nèi)定義一個名為 “FILE” 的文件參數(shù)配置。主要是配置日志文件的輸出文件名、日志文件保留時間、日志文件保存的路徑和日志的輸出格式、及單個日志文件存儲的大小。

<!-- 按照每天生成日志文件 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <!--日志文件輸出的文件名-->
        <FileNamePattern>${LOG_HOME}</FileNamePattern>
        <!--日志文件保留天數(shù)-->
        <MaxHistory>30</MaxHistory>
    </rollingPolicy>
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
         <!-- 變量引入  -->
         <pattern>${LOG_PATTERN}</pattern>
            
         <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日志消息,%n是換行符-->
         <!-- <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> -->
    </encoder>
    <!--日志文件最大的存儲-->
    <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
         <MaxFileSize>10MB</MaxFileSize>
    </triggeringPolicy>
</appender>

分析:

 這里,根據(jù)前面配置的日志變量,引入到配置日志文件的輸出文件名、日志文件保留時間、日志文件保存的路徑和日志的輸出格式、及單個日志文件存儲的大小的各個標簽項即可。

5.5 定義日志的輸出級別

在完成前邊的準備工作后,最后來定義一下日志的輸出級別:

<!-- 日志輸出級別 -->
<logger name="org.springframework" level="ERROR"/>
<logger name="com.hl.magic" level="ERROR"/>
<root level="ERROR">
    <appender-ref ref="CONSOLE"/>
    <appender-ref ref="FILE"/>
</root>

分析:

在<logger>標簽中來項目默認的日志輸出級別,這里定義級別為ERROR(用在生產(chǎn)環(huán)境中),然后針對ERROR級別的日志,使用<root>引用上面定義好的控制臺日志輸出和日志文件的參數(shù)。這樣 logback.xml 文件中的配置就設置完了。

注意:

<logger>標簽并不是只能添加一個,我們還可以指定項目特定包路徑的日志輸出級別。

本文測試類配置日志輸出級別為:DEBUG,使用最低日志輸出級別,確保后邊測試時能夠打印出所有測試項。如果需要改變?nèi)罩炯墑e就在上面配置內(nèi)容修改即可。

6、測試日志輸出

在程序中,一般使用 Logger(注意引jar包為slf4j) 對象來打印出一些日志信息,可以指定打印出的日志級別,也支持占位符。

定義一個測試類:LoggerItemController.java

/**
 * 日志輸出測試的controller
 */
@RestController
@RequestMapping("/loggerItem")
public class LoggerItemController {
 
    private static final Logger logger = LoggerFactory.getLogger(LoggerItemController.class);
 
    @GetMapping("/logInfo")
    public ResponseMessage logTest(){
 
        logger.debug("=====>測試日志debug級別打印<====");
        logger.info("=====>測試日志info級別打印<=====");
        logger.error("=====>測試日志error級別打印<====");
        logger.warn("=====>測試日志warn級別打印<=====");
 
        // 使用占位符打印出一些參數(shù)信息
        String csdn = "https://blog.csdn.net/qq_27706119";
        String git = "https://github.com/JohnnyHL";
        logger.info("======>AndOne丶的CSDN博客:{};AndOne丶的GitHub地址:{};", csdn, git);
 
        return new ResponseMessage(ResponseStatus.SUCCESS.getStatus(),ResponseStatus.SUCCESS.getMessage());
    }
}

先啟動項目,瀏覽器訪問地址:127.0.0.1:8080/loggerItem/logInfo

查看控制臺打印信息:

=====>測試日志debug級別打印<====
=====>測試日志info級別打印<=====
=====>測試日志error級別打印<====
=====>測試日志warn級別打印<=====
======>AndOne丶的CSDN博客:https://blog.csdn.net/qq_27706119;AndOne丶的GitHub地址:https://github.com/JohnnyHL;

日志的輸出級別中,DEBUG為最低級別,這樣能打印出全部信息。如果提高日志輸出級別,比如選擇INFO。則DEBUG 這條記錄將不會被打印出來,這個大家可自行測試即可。同時,查看下前邊配置的日志存儲路徑:“/HL/IdeaProjects/SpringBoot-Item/springboot-slf4j/log”目錄,該目錄下記錄了項目啟動,以及后面生成的所有日志記錄。在日常開發(fā)過程中,項目部署后,可通過查看日志文件來定位問題。

以上是“如何使用SpringBoot集成slf4j日志配置”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關知識,歡迎關注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI