最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot項目使用Log4j2+SLF4J構(gòu)建日志的方法步驟

 更新時間:2025年11月11日 10:07:10   作者:熙客  
在現(xiàn)代軟件開發(fā)中,日志記錄是一個重要的部分,Spring Boot配置了多種日志框架,這篇文章主要介紹了SpringBoot項目使用Log4j2+SLF4J構(gòu)建日志的方法步驟,文中通過代碼介紹的非常詳細,需要的朋友可以參考下

1、添加項目依賴

確保的pom.xml中包含Spring Boot Starter Log4j2的依賴,同時排除默認(rèn)的Logback

<dependencies>
    <!-- Spring Boot Log4j2 Starter -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <exclusions>
            <!-- 排除掉默認(rèn)的 logback 依賴 -->
            <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>
</dependencies>

2、創(chuàng)建TraceId過濾器

這個Filter負責(zé)在請求開始時生成TraceId并放入上下文,在請求結(jié)束后清理

import org.apache.logging.log4j.ThreadContext;
import org.springframework.stereotype.Component;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.UUID;

@Component
public class TraceIdFilter implements Filter {
    
    // 你可以自定義請求頭中TraceId的名字
    private static final String TRACE_ID_HEADER = "X-Trace-Id";
    // 這是TraceId在Log4j2 ThreadContext中存儲的key
    private static final String TRACE_ID_KEY = "traceId";

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        
        HttpServletRequest httpRequest = (HttpServletRequest) request;
        HttpServletResponse httpResponse = (HttpServletResponse) response;

        // 嘗試從請求頭中獲取TraceId,如果沒有則生成一個
        String traceId = httpRequest.getHeader(TRACE_ID_HEADER);
        if (traceId == null || traceId.isEmpty()) {
            // 生成唯一ID,這里使用UUID,你可以根據(jù)需要調(diào)整
            traceId = UUID.randomUUID().toString().replace("-", "").substring(0, 16);
        }

        // 將TraceId放入Log4j2的ThreadContext,這樣日志就能自動打印了
        ThreadContext.put(TRACE_ID_KEY, traceId);
        // 可選:將TraceId設(shè)置到響應(yīng)頭,方便前端或下游服務(wù)追蹤
        httpResponse.setHeader(TRACE_ID_HEADER, traceId);

        try {
            chain.doFilter(request, response); // 繼續(xù)執(zhí)行請求鏈
        } finally {
            // 請求處理完畢,務(wù)必清理ThreadContext,避免內(nèi)存泄漏和數(shù)據(jù)污染
            ThreadContext.remove(TRACE_ID_KEY);
        }
    }
}

3、配置Log4j2以輸出TraceId

修改src/main/resources/log4j2.xml配置文件,在日志輸出模式(Pattern)中加入TraceId

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <!-- 控制臺輸出配置 -->
        <Console name="Console" target="SYSTEM_OUT">
            <!-- 設(shè)置日志輸出格式 -->
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level [%X{traceId}] %logger{36} - %msg%n" />
        </Console>
    </Appenders>
    <Loggers>
        <Root level="info">
            <AppenderRef ref="Console" />
        </Root>
    </Loggers>
</Configuration>

關(guān)鍵說明

  • 格式中的%X{traceId}就是一個占位符,它會自動從Log4j2的ThreadContext中讀取key為"traceId"的值 。如果不存在,則該處輸出為空。

4、在代碼中記錄日志

現(xiàn)在可以在代碼中正常使用SLF4J記錄日志,TraceId會自動出現(xiàn)在日志中。

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class DemoController {
    
    private static final Logger logger = LoggerFactory.getLogger(DemoController.class);
    
    @GetMapping("/test")
    public String testEndpoint() {
        logger.info("收到請求"); // 日志會自動包含traceId
        // ... 你的業(yè)務(wù)邏輯
        return "請求完成";
    }
}

5、日志掛載位置

在Spring Boot項目中,設(shè)置日志的掛載位置主要有兩種思路:一種是通過應(yīng)用的配置文件(如application.propertiesapplication.yml)進行快速設(shè)置,另一種是通過自定義的日志配置文件(如logback-spring.xmllog4j2-spring.xml)實現(xiàn)更精細的控制。

配置方式核心參數(shù)作用示例
配置文件
(application.properties/yml)
logging.file.name設(shè)置完整的日志文件路徑和文件名logging.file.name=/var/log/myapp/app.log
logging.file.path設(shè)置日志文件的目錄,Spring Boot會自動在該目錄下生成名為spring.log的文件。logging.file.path=/var/log/myapp
logging.config指定自定義日志配置文件的位置。logging.config=classpath:logback-spring.xml
自定義配置
(logback-spring.xml)
LOG_FILE 或 LOG_PATH在XML配置文件中,使用Spring Boot預(yù)定義的系統(tǒng)屬性來動態(tài)引用在application.properties中設(shè)置的日志路徑或文件。<file>${LOG_FILE}</file>

5.1 通過應(yīng)用配置文件設(shè)置

這是最簡單直接的方法,適合大多數(shù)常規(guī)需求。

指定完整路徑和文件名:

使用 logging.file.name 可以精確控制日志文件的存儲位置和名稱。

# application.properties 示例
logging.file.name=/var/log/your-app/application.log
# application.yml 示例
logging:
  file:
    name: /var/log/your-app/application.log

僅指定目錄:

使用 logging.file.path,Spring Boot會在該目錄下創(chuàng)建固定的spring.log文件。

# application.properties 示例
logging.file.path=/var/log/your-app

5.2 通過自定義日志配置文件設(shè)置

當(dāng)有復(fù)雜需求時(如按天歸檔、按文件大小分割、對不同級別日志進行過濾等),建議使用自定義日志配置文件。

創(chuàng)建配置文件:在 src/main/resources 目錄下創(chuàng)建 logback-spring.xml(如果使用Logback)或 log4j2-spring.xml(如果使用Log4j2)。

在配置文件中引用外部路徑:在XML配置中,可以使用 ${LOG_FILE} 或 ${LOG_PATH} 來獲取在 application.properties 中設(shè)置的值,這使得配置非常靈活。

<!-- logback-spring.xml 示例片段 -->
<configuration>
    <springProperty scope="context" name="LOG_HOME" source="logging.file.path" defaultValue="/tmp/logs"/>
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 使用在application.properties中設(shè)置的logging.file.path -->
        <file>${LOG_HOME}/spring.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 按天歸檔日志 -->
            <fileNamePattern>${LOG_HOME}/application.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- 保留最多30天的日志歷史 -->
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>
    <!-- 其他配置... -->
</configuration>

5.3 通過命令行或環(huán)境變量設(shè)置

在部署時(例如在Kubernetes或Docker容器中),通過命令行參數(shù)或環(huán)境變量來覆蓋配置文件中的設(shè)置,這種方式非常有用。

命令行參數(shù):

java -jar your-app.jar --logging.file.name=/path/to/your/logfile.log

環(huán)境變量:

export LOGGING_FILE_NAME=/path/to/your/logfile.log
java -jar your-app.jar

注意事項:

  • 掛載到容器外部:在Docker或Kubernetes中部署時,務(wù)必通過卷掛載(Volume)的方式將配置的日志目錄(如/var/log/your-app)掛載到宿主機上。這樣可以避免容器重啟后日志丟失,也方便日志收集和管理。

  • 權(quán)限問題:確保你的應(yīng)用有在指定日志目錄下寫入文件的權(quán)限,這是一個常見的部署問題。

  • 路徑選擇:生產(chǎn)環(huán)境中,日志通常放在 /var/log/ 目錄下,并根據(jù)應(yīng)用名稱建立子目錄,例如 /var/log/your-app-name/。

  • 配置優(yōu)先級:如果同時設(shè)置了 logging.file.name 和 logging.file.path,logging.file.name 的優(yōu)先級更高。

總結(jié) 

到此這篇關(guān)于SpringBoot項目使用Log4j2+SLF4J構(gòu)建日志的文章就介紹到這了,更多相關(guān)SpringBoot用Log4j2+SLF4J構(gòu)建日志內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:

相關(guān)文章

  • Springboot2.0處理自定義異常并返回json

    Springboot2.0處理自定義異常并返回json

    這篇文章主要介紹了Springboot2.0處理自定義異常并返回json,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-11-11
  • IDEA+Maven創(chuàng)建Spring項目的實現(xiàn)步驟

    IDEA+Maven創(chuàng)建Spring項目的實現(xiàn)步驟

    這篇文章主要介紹了IDEA+Maven創(chuàng)建Spring項目的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • SpringBoot @Autowired注解注入規(guī)則介紹

    SpringBoot @Autowired注解注入規(guī)則介紹

    這篇文章主要介紹了SpringBoot @Autowired注解注入規(guī)則介紹,具有很好的參考價值,希望對大家有所幫助。
    2021-11-11
  • 在IDEA中創(chuàng)建跑得起來的Springboot項目

    在IDEA中創(chuàng)建跑得起來的Springboot項目

    這篇文章主要介紹了在IDEA中創(chuàng)建跑得起來的Springboot項目的圖文教程,需要的朋友可以參考下
    2018-04-04
  • Struts 2中的constant配置詳解

    Struts 2中的constant配置詳解

    通過對這些屬性的配置,可以改變Struts 2 框架的一些默認(rèn)行為,這些配置可以在struts.xml文件中完成,也可以在struts.properties文件中完成
    2016-09-09
  • quarzt定時調(diào)度任務(wù)解析

    quarzt定時調(diào)度任務(wù)解析

    這篇文章主要介紹了quarzt定時調(diào)度任務(wù),具有一定參考價值,需要的朋友可以了解下。
    2017-12-12
  • Java使用Google Zxing生成二維碼的例子

    Java使用Google Zxing生成二維碼的例子

    本篇文章主要介紹了Java使用Google Zxing生成二維碼的例子。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • SpringBoot實現(xiàn)海量數(shù)據(jù)高效實時搜索功能

    SpringBoot實現(xiàn)海量數(shù)據(jù)高效實時搜索功能

    我們都知道隨著業(yè)務(wù)系統(tǒng)的發(fā)展和使用,數(shù)據(jù)庫存儲的業(yè)務(wù)數(shù)據(jù)量會越來越大,逐漸成為了業(yè)務(wù)系統(tǒng)的瓶頸,本文給大家介紹了Spring Boot業(yè)務(wù)系統(tǒng)如何實現(xiàn)海量數(shù)據(jù)高效實時搜索,文中有詳細的代碼示例,需要的朋友可以參考下
    2023-10-10
  • springcloud feign調(diào)其他微服務(wù)時參數(shù)是對象的問題

    springcloud feign調(diào)其他微服務(wù)時參數(shù)是對象的問題

    這篇文章主要介紹了springcloud feign調(diào)其他微服務(wù)時參數(shù)是對象的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • IDEA中g(shù)it對于指定文件進行版本控制的全過程

    IDEA中g(shù)it對于指定文件進行版本控制的全過程

    用戶在IDEA中遇到默認(rèn)提交所有修改的問題,通過配置.gitignore和.git/info/exclude忽略特定文件,并利用vcs.xml指定版本控制范圍,實現(xiàn)精準(zhǔn)版本管理,本文通過圖文給大家介紹了IDEA中g(shù)it對于指定文件進行版本控制的全過程,需要的朋友可以參考下
    2025-05-05

最新評論

四子王旗| 乌审旗| 霍林郭勒市| 靖安县| 筠连县| 静乐县| 渑池县| 定陶县| 舞阳县| 龙井市| 广汉市| 剑河县| 麻栗坡县| 徐闻县| 凤山县| 沧源| 邵武市| 临海市| 泸西县| 白河县| 逊克县| 大方县| 冷水江市| 兰考县| 金乡县| 来安县| 手游| 河北省| 宜阳县| 杂多县| 东乌| 蒙自县| 商城县| 呼伦贝尔市| 福海县| 高雄市| 咸阳市| 巍山| 和田市| 阳山县| 张掖市|