欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring Boot配置日志的實現(xiàn)步驟

 更新時間:2025年07月28日 10:16:00   作者:伊成  
日志記錄在軟件開發(fā)中至關(guān)重要,能夠幫助快速定位和解決問題,文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學習學習吧

一、寫在前面

對于日志文件,相信大家都并不陌生,通過在關(guān)鍵位置打印相關(guān)的日志,有利于快速跟蹤和定位軟件系統(tǒng)運行中存在的問題。

在之前的 Java 實現(xiàn)日志記錄的文章中,我們介紹了能實現(xiàn)日志記錄的主流框架有 Log4j、Log4j2、Logback 等,通過一些性能測試發(fā)現(xiàn),Logback 和 Log4j2 兩個都比較優(yōu)秀。同時,它們都支持與 SLF4J 框架的集成,可以輕松實現(xiàn)系統(tǒng)日志框架實現(xiàn)的切換,這主要得益于門面模式的設計。

當采用 Slf4j 來實現(xiàn)日志輸出時,我們不需要再糾結(jié)到底是用 Log4j2 還是用 Logback 。Slf4j 相當于一個門面接口,可以讓代碼更加統(tǒng)一,同時它并不是一個日志實現(xiàn)框架,具體的實現(xiàn)會在 Slf4j 接口被調(diào)用的時候委托給具體的日志框架來實現(xiàn)。比如,當系統(tǒng)中有 Logback 時,就委托 Logback 來輸出日志;當有 Log4j2 時,就委托 Log4j2 來實現(xiàn);如果兩者同時存在,可能會報循環(huán)依賴的錯誤,因此在項目添加依賴的時候,只能選擇其中一個,如果有不兼容的問題,需要手動排除。

對于一個 Java web 項目,當采用Slf4j + Logback來實現(xiàn)日志信息的輸出時,通常會添加類似于如下的相關(guān)依賴包。

<!-- 添加slf4j依賴包 -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.25</version>
</dependency>
<!-- 添加logback依賴包 -->
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.1.7</version>
</dependency>

然后,在項目根目錄下創(chuàng)建logback.xml并配置相關(guān)參數(shù),示例如下。

<?xml version="1.0" encoding="UTF-8"?>
<!-- scan:當此屬性設置為true時,配置文件如果發(fā)生改變,將會被重新加載,默認值為true。 scanPeriod:設置監(jiān)測配置文件是否有修改的時間間隔,如果沒有給出時間單位,默認單位是毫秒。當scan為true時,此屬性生效。默認的時間間隔為1分鐘。 
    debug:當此屬性設置為true時,將打印出logback內(nèi)部日志信息,實時查看logback運行狀態(tài)。默認值為false。 -->
<configuration scan="true" scanPeriod="60 seconds" debug="false">

    <!-- 
    %d{yyyy-MM-dd HH:mm:ss} [%level] - %msg%n
      Logger: %logger
      Class: %class
      File: %file
      Caller: %caller
      Line: %line
      Message: %m
      Method: %M
      Relative: %relative
      Thread: %thread
      Exception: %ex
      xException: %xEx
      nopException: %nopex
      rException: %rEx
      Marker: %marker
      newline:%n
    -->
    <property name="CUSTOM_LOG_PATTERN"
        value="%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{90} - %msg%n" />
        
    <!-- 上下文名稱 -->
    <contextName>${CONTEXT_NAME}</contextName>

    <!-- 日志輸出組件 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <!-- 對日志進行格式化。 -->
        <encoder>
            <pattern>${CUSTOM_LOG_PATTERN}</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!-- 日志級別為INFO,日志輸出到控制臺 -->
    <root level="INFO">
        <appender-ref ref="CONSOLE" />
    </root>
</configuration>

最后,通過門面接口來輸出日志,示例如下:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class LogPrintUtil {

    private static final Logger LOGGER = LoggerFactory.getLogger(LogPrintUtil.class);
    
    public static void main(String[] args){
        LOGGER.info("info信息");
        LOGGER.warn("warn信息");
        LOGGER.error("error信息");
    }
}

二、Spring Boot 日志配置

當我們采用 SpringBoot 框架來開發(fā)系統(tǒng)的時候,其實默認已經(jīng)幫我們集成好了spring-boot-starter-logging日志依賴包,它底層采用的就是上面介紹的logback日志實現(xiàn)框架,同時也集成了Slf4j依賴庫。

默認的logback日志配置文件在org/springframework/boot/logging/logback/defaults.xml下,我們只需要在相關(guān)的位置采用slf4j接口來打印日志即可,示例如下:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class LogApplication {

    private static final Logger LOGGER = LoggerFactory.getLogger(LogApplication.class);

    public static void main(String[] args) {
        SpringApplication.run(LogApplication.class, args);

        LOGGER.error("Hello World");
        LOGGER.warn("Hello World");
        LOGGER.info("Hello World");
        LOGGER.debug("Hello World");
        LOGGER.trace("Hello World");
    }
}

啟動服務,可以看到類似于如下的打印結(jié)果:

默認的日志級別為info,如果想更改日志級別,可以在application.properties文件配置日志打印級別,比如改成trace,參數(shù)如下:

logging.level.root=trace

重新啟動服務,日志打印結(jié)果如下:

從控制臺輸出的結(jié)果可以初步分析出,trace級別最低,可以打印所有級別的日志。在整個日志體系中,級別從低到高分為:

TRACE < DEBUG < INFO < WARN < ERROR

級別越底,可打印的日志就更多;相反,級別越高,輸出的日志就更少。

從實際情況來看,太多的日志打印也未必是一件好事,有時候會把服務器磁盤撐爆,導致服務宕機。通常我們會配置INFO級別,在關(guān)鍵的位置打印相關(guān)信息即可。

2.1、Logback 自定義配置

在實際的業(yè)務開發(fā)中,通常我們會自定義Logback相關(guān)配置文件,有兩種做法。

  • 第一種:創(chuàng)建logback.xml配置文件,這種配置文件會直接被日志框架加載
  • 第二種:創(chuàng)建logback-spring.xml配置文件,這種配置文件不會直接被日志框架加載,而是先由 SpringBoot 去解析日志配置再加載,可以使用 SpringBoot 的一些高級功能,比如 Profile 屬性。

這里,我們選擇第二種方式,在src/main/resources目錄下,創(chuàng)建logback-spring.xml文件,一般標準寫法如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <!--定義相關(guān)變量-->
    <property name="log.dir" value="log-demo" />
    <property name="custom.log.pattern" value="%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{90} - %msg%n" />

    <!-- 控制臺文件輸出 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${custom.log.pattern}</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!-- 文件輸出 -->
    <appender name="APP_LOG"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.dir}/log_info.log</file>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${custom.log.pattern}</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.dir}/histroy/log-%d{yyyy-MM-dd}-%i.log
            </fileNamePattern>
            <maxHistory>30</maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>250MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
    </appender>

    <root level="INFO">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="APP_LOG" />
    </root>

</configuration>

其中CONSOLE節(jié)點,表示將日志輸出到控制臺;APP_LOG節(jié)點,表示將日志輸出到文件中,并自動將最近 30 天的日志文件進行歸檔到histroy 文件夾中。

如果想要讀取 Spring Boot properties 或根據(jù) Spring profile 定義日志配置,可以通過如下方式實現(xiàn)。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <!--獲取application.properties中定義的變量-->
    <springProperty scope="context"
                    name="customLogPattern"
                    source="custom.log.pattern"
                    defaultValue="%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{90} - %msg%n"/>

    <springProperty scope="context"
                    name="LogDir"
                    source="custom.log.dir"
                    defaultValue="log-demo"/>


    <!-- 控制臺文件輸出 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${customLogPattern}</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!-- 文件輸出 -->
    <appender name="APP_LOG"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LogDir}/log_info.log</file>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${customLogPattern}</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!--獲取springProfile變量-->
    <springProfile name="dev">
        <root level="INFO">
            <appender-ref ref="CONSOLE" />
            <appender-ref ref="APP_LOG" />
        </root>
    </springProfile>

    <springProfile name="prod">
        <root level="INFO">
            <appender-ref ref="APP_LOG" />
        </root>
    </springProfile>

</configuration>

application.properties文件相關(guān)的配置參數(shù)如下:

# 指定spring profiles 參數(shù)
spring.profiles.active=dev
# 自定義打印格式
custom.log.pattern=%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{90} - %msg%n
# 自定義日志存儲路徑
custom.log.dir=app-demo

2.2、Log4j2 自定義配置

如果項目更傾向于使用 Log4j2 而不是 Logback,遷移方式也很簡單。

首先,需要排除掉默認 Logback 相關(guān)依賴庫,然后添加log4j2相關(guān)依賴包,示例如下:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

Logback類似,當添加相關(guān)依賴包之后,Spring Boot 默認帶了一個log4j2.xml日志配置文件,在org/springframework/boot/logging/log4j2/log4j2.xml。

但是,基于業(yè)務的需要,通常我們會自定義配置文件,一般寫法如下:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="info" monitorInterval="3">

    <!--變量配置-->
    <Properties>
        <!--定義日志存儲的路徑 -->
        <property name="log.dir" value="app-demo"/>
        <!-- 定義日志輸出格式 -->
        <property name="custom.log.pattern" value="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %l %msg%n"/>
    </Properties>

    <Appenders>
        <!-- 控制臺輸出 -->
        <Console name="CONSOLE" target="SYSTEM_OUT">
            <PatternLayout pattern="${custom.log.pattern}"/>
        </Console>

        <!-- 文件輸出 -->
        <RollingFile name="APP_LOG" fileName="${log.dir}/app.log"
                     filePattern="${log.dir}/app-%d{MM-dd-yyyy}-%i.log.gz">
            <PatternLayout pattern="${custom.log.pattern}"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
                <!-- size根據(jù)實際的日志量填寫 -->
                <SizeBasedTriggeringPolicy size="100 MB"/>
            </Policies>
        </RollingFile>
    </Appenders>

    <Loggers>
        <!-- 日志記錄級別 -->
        <Root level="info">
            <AppenderRef ref="CONSOLE"/>
            <AppenderRef ref="APP_LOG"/>
        </Root>
    </Loggers>
</Configuration>

此時如果代碼中采用的是門面模式的編程方式,無需做任何的調(diào)整,即可實現(xiàn)日志框架的切換改造。

小結(jié)

最后總結(jié)一下,對于簡單的應用場景,并發(fā)量不高的環(huán)境下,可以采用 Logback 來實現(xiàn)日志打印;如果對性能要求較高,可以采用 Log4j2,據(jù)官方提供的測試報告中,Log4j2 在性能和新技術(shù)的應用,比 Logback 領(lǐng)先,畢竟是后起之秀,但是兼容性方面,Logback 更優(yōu)。

到此這篇關(guān)于Spring Boot配置日志的實現(xiàn)步驟的文章就介紹到這了,更多相關(guān)Spring Boot配置日志內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解SpringBoot中使用JPA作為數(shù)據(jù)持久化框架

    詳解SpringBoot中使用JPA作為數(shù)據(jù)持久化框架

    這篇文章主要介紹了SpringBoot中使用JPA作為數(shù)據(jù)持久化框架的相關(guān)知識,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • JAVA中常用的數(shù)據(jù)結(jié)構(gòu)和XML使用解析

    JAVA中常用的數(shù)據(jù)結(jié)構(gòu)和XML使用解析

    這篇文章主要介紹了JAVA中常用的數(shù)據(jù)結(jié)構(gòu)和XML使用,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • mybatis對于list更新sql語句的寫法說明

    mybatis對于list更新sql語句的寫法說明

    這篇文章主要介紹了mybatis對于list更新sql語句的寫法說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • springcloud+nacos實現(xiàn)灰度發(fā)布示例詳解

    springcloud+nacos實現(xiàn)灰度發(fā)布示例詳解

    這篇文章主要介紹了springcloud+nacos實現(xiàn)灰度發(fā)布,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-08-08
  • springboot實現(xiàn)excel表格導出幾種常見方法

    springboot實現(xiàn)excel表格導出幾種常見方法

    在日常的開發(fā)中避免不了操作Excel,下面這篇文章主要給大家介紹了關(guān)于springboot實現(xiàn)excel表格導出的幾種常見方法,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-11-11
  • LocalDateTime日期時間格式中間多了一個T的問題及解決

    LocalDateTime日期時間格式中間多了一個T的問題及解決

    這篇文章主要介紹了LocalDateTime日期時間格式中間多了一個T的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Java中的List和MySQL中的varchar相互轉(zhuǎn)換的解決方案

    Java中的List和MySQL中的varchar相互轉(zhuǎn)換的解決方案

    實體類中有一個 List<String> 類型的屬性,對應于 MySQL 表里的 varchar 字段,使用 MyBatis 添加或查詢時能互相轉(zhuǎn)換,本文給大家介紹Java中的List和MySQL中的varchar相互轉(zhuǎn)換的解決方案,需要的朋友可以參考下
    2024-06-06
  • 從application.properties配置文件獲取的漢字亂碼的解決方法

    從application.properties配置文件獲取的漢字亂碼的解決方法

    平時從配置文件各種讀取配置參數(shù)都正常,但是有時候放了個中文就亂碼,你肯定試過網(wǎng)上好多方法,都沒解決,那么來看下面,恭喜你終于找這里了,本文給大家介紹了從application.properties配置文件獲取的漢字亂碼的解決方法,需要的朋友可以參考下
    2024-03-03
  • 使用jar包反編譯形成pom工程

    使用jar包反編譯形成pom工程

    這篇文章主要介紹了使用jar包反編譯形成pom工程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • 聊聊Java并發(fā)中的Synchronized

    聊聊Java并發(fā)中的Synchronized

    這篇文章主要介紹了聊聊Java并發(fā)中的Synchronized,介紹了同步的基礎,原理,鎖的相關(guān)內(nèi)容,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11

最新評論