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

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

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

一、寫在前面

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

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

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

對(duì)于一個(gè) Java web 項(xiàng)目,當(dāng)采用Slf4j + Logback來(lái)實(shí)現(xiàn)日志信息的輸出時(shí),通常會(huì)添加類似于如下的相關(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>

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

<?xml version="1.0" encoding="UTF-8"?>
<!-- scan:當(dāng)此屬性設(shè)置為true時(shí),配置文件如果發(fā)生改變,將會(huì)被重新加載,默認(rèn)值為true。 scanPeriod:設(shè)置監(jiān)測(cè)配置文件是否有修改的時(shí)間間隔,如果沒(méi)有給出時(shí)間單位,默認(rèn)單位是毫秒。當(dāng)scan為true時(shí),此屬性生效。默認(rèn)的時(shí)間間隔為1分鐘。 
    debug:當(dāng)此屬性設(shè)置為true時(shí),將打印出logback內(nèi)部日志信息,實(shí)時(shí)查看logback運(yùn)行狀態(tài)。默認(rèn)值為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">
        <!-- 對(duì)日志進(jìn)行格式化。 -->
        <encoder>
            <pattern>${CUSTOM_LOG_PATTERN}</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!-- 日志級(jí)別為INFO,日志輸出到控制臺(tái) -->
    <root level="INFO">
        <appender-ref ref="CONSOLE" />
    </root>
</configuration>

最后,通過(guò)門面接口來(lái)輸出日志,示例如下:

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 日志配置

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

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

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");
    }
}

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

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

logging.level.root=trace

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

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

TRACE < DEBUG < INFO < WARN < ERROR

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

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

2.1、Logback 自定義配置

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

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

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

<?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" />

    <!-- 控制臺(tái)文件輸出 -->
    <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é)點(diǎn),表示將日志輸出到控制臺(tái);APP_LOG節(jié)點(diǎn),表示將日志輸出到文件中,并自動(dòng)將最近 30 天的日志文件進(jìn)行歸檔到histroy 文件夾中。

如果想要讀取 Spring Boot properties 或根據(jù) Spring profile 定義日志配置,可以通過(guò)如下方式實(shí)現(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"/>


    <!-- 控制臺(tái)文件輸出 -->
    <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
# 自定義日志存儲(chǔ)路徑
custom.log.dir=app-demo

2.2、Log4j2 自定義配置

如果項(xiàng)目更傾向于使用 Log4j2 而不是 Logback,遷移方式也很簡(jiǎn)單。

首先,需要排除掉默認(rèn) Logback 相關(guān)依賴庫(kù),然后添加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類似,當(dāng)添加相關(guān)依賴包之后,Spring Boot 默認(rèn)帶了一個(gè)log4j2.xml日志配置文件,在org/springframework/boot/logging/log4j2/log4j2.xml。

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

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

    <!--變量配置-->
    <Properties>
        <!--定義日志存儲(chǔ)的路徑 -->
        <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>
        <!-- 控制臺(tái)輸出 -->
        <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ù)實(shí)際的日志量填寫 -->
                <SizeBasedTriggeringPolicy size="100 MB"/>
            </Policies>
        </RollingFile>
    </Appenders>

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

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

小結(jié)

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

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

相關(guān)文章

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

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

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

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

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

    mybatis對(duì)于list更新sql語(yǔ)句的寫法說(shuō)明

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

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

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

    springboot實(shí)現(xiàn)excel表格導(dǎo)出幾種常見(jiàn)方法

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

    LocalDateTime日期時(shí)間格式中間多了一個(gè)T的問(wèn)題及解決

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

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

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

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

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

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

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

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

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

最新評(píng)論