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

Spring Boot 日志配置詳解:log4j2.xml 的完整配置指南

 更新時間:2026年04月23日 15:28:54   作者:??? 枕星河  
本文介紹了在SpringBoot項目中配置Log4j2的方法,包括選擇Log4j2的原因、Maven依賴配置、application.yml配置、log4j2.xml完整配置詳解,以及性能優(yōu)化建議,通過合理配置,可以構(gòu)建高性能的異步日志記錄系統(tǒng),滿足日常開發(fā)和運維需求

在現(xiàn)代企業(yè)級應用開發(fā)中,日志管理是系統(tǒng)運維和問題排查的重要組成部分。本文將詳細介紹如何在 Spring Boot 項目中配置 Log4j2,包括完整的 [log4j2.xml]配置文件和相關依賴設置。

一、為什么選擇 Log4j2?

Spring Boot 默認使用 Logback 作為日志框架,但在某些場景下我們更傾向于使用 Log4j2:

  1. 性能優(yōu)勢:Log4j2 使用異步日志記錄,在高并發(fā)環(huán)境下性能表現(xiàn)更優(yōu)
  2. 無鎖設計:采用 LMAX Disruptor 庫實現(xiàn)無鎖異步日志記錄
  3. 靈活配置:支持更豐富的日志過濾和格式化選項
  4. 動態(tài)更新:配置文件修改后無需重啟應用即可生效

二、Maven 依賴配置

1. 排除默認日志框架

首先需要排除 Spring Boot 默認的 Logback 依賴:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</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</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>

2. 添加 Log4j2 依賴

然后添加 Log4j2 相關依賴:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<!-- 高性能異步日志庫 -->
<dependency>
    <groupId>com.lmax</groupId>
    <artifactId>disruptor</artifactId>
    <version>3.4.4</version>
</dependency>

三、application.yml 配置

在 [application-pre.yml] 文件中指定日志配置文件:

logging:
  config: classpath:log4j2.xml

這樣配置可以讓 Spring Boot 加載自定義的 Log4j2 配置文件。

3、log4j2.xml 完整配置詳解

1. Properties 屬性定義

<Properties>
    <property name="LOG_HOME" value="/home/test/doc/log"/>
    <property name="APP_CODE" value="file_log"/>
    <property name="LOG_LEVEL_PATTERN" value="%-5p"/>
    <property name="INSTANCE_INFO_PATTERN" value="${hostName} | ${sys:user.name}"/>
    <property name="CODE_INFO_PATTERN" value="%pid:%F:%L"/>
    <property name="LOG_DATEFORMAT_PATTERN" value="yyyy-MM-dd HH:mm:ss.SSS"/>
    <property name="APP_LOG_PATTERN" value="%d{${LOG_DATEFORMAT_PATTERN}} | ${LOG_LEVEL_PATTERN} | %X{TRACE_ID}  | %t | ${CODE_INFO_PATTERN} | [%X{seq}] - %m%n"/>
    <property name="LOG_PATTERN" value="%d{${LOG_DATEFORMAT_PATTERN}} | %X{TRACE_ID} | ${LOG_LEVEL_PATTERN} | ${INSTANCE_INFO_PATTERN} | FEIA | FLEP-INAPP | %t | ${CODE_INFO_PATTERN} | %m%n"/>
    <property name="ALERT_LOG_PATTERN" value="%d{${LOG_DATEFORMAT_PATTERN}} $${ctx:traceId:-} | ${INSTANCE_INFO_PATTERN} | [%X{seq}] - %m%n"/>
</Properties>

這里定義了日志系統(tǒng)的各種屬性,包括日志存儲路徑、日志級別格式、實例信息格式等。

2. Appenders 輸出配置

控制臺輸出配置

<Console name="Console" target="SYSTEM_OUT" follow="true">
    <PatternLayout pattern="%d{${LOG_DATEFORMAT_PATTERN}} | ${LOG_LEVEL_PATTERN} | %t | %c:%L | [%X{seq}] - %m%n" />
</Console>

文件滾動策略配置

Log4j2 支持多種滾動策略,以下是一些常用配置:

事件日志配置

<RollingFile name="EventLogFile" fileName="${LOG_HOME}/event.log" immediateFlush="true"
             filePattern="${LOG_HOME}/%d{yyyyMMdd}/event.log.%i">
    <PatternLayout>
        <Pattern>${LOG_PATTERN}</Pattern>
    </PatternLayout>
    <Policies>
        <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
        <SizeBasedTriggeringPolicy size="50MB"/>
    </Policies>
    <DefaultRolloverStrategy>
        <Delete basePath="${LOG_HOME}" maxDepth="2">
            <IfFileName glob="*/event.log.*" />
            <IfLastModified age="30d" />
        </Delete>
    </DefaultRolloverStrategy>
</RollingFile>

應用日志配置

<RollingFile name="AppLogFile" fileName="${LOG_HOME}/app.log" immediateFlush="true"
             filePattern="${LOG_HOME}/%d{yyyyMMdd}/app.log.%i">
    <PatternLayout>
        <Pattern>${APP_LOG_PATTERN}</Pattern>
    </PatternLayout>
    <Policies>
        <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
        <SizeBasedTriggeringPolicy size="50MB"/>
    </Policies>
    <DefaultRolloverStrategy>
        <Delete basePath="${LOG_HOME}" maxDepth="2">
            <IfFileName glob="*/app.log.*" />
            <IfLastModified age="30d" />
        </Delete>
    </DefaultRolloverStrategy>
</RollingFile>

告警日志配置

<RollingFile name="AlertLogFile" fileName="${LOG_HOME}/alert.log" immediateFlush="true"
             filePattern="${LOG_HOME}/%d{yyyyMMdd}/alert.log.%i">
    <thresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
    <PatternLayout>
        <Pattern>${ALERT_LOG_PATTERN}</Pattern>
    </PatternLayout>
    <Policies>
        <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
        <SizeBasedTriggeringPolicy size="50MB"/>
    </Policies>
    <DefaultRolloverStrategy>
        <Delete basePath="${LOG_HOME}" maxDepth="2">
            <IfFileName glob="*/alert.log.*" />
            <IfLastModified age="30d" />
        </Delete>
    </DefaultRolloverStrategy>
</RollingFile>

錯誤日志配置

<RollingFile name="ErrorLogFile" fileName="${LOG_HOME}/error.log" immediateFlush="true"
             filePattern="${LOG_HOME}/%d{yyyyMMdd}/error.log.%i">
    <thresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
    <PatternLayout>
        <Pattern>${APP_LOG_PATTERN}</Pattern>
    </PatternLayout>
    <Policies>
        <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
        <SizeBasedTriggeringPolicy size="50MB"/>
    </Policies>
    <DefaultRolloverStrategy>
        <Delete basePath="${LOG_HOME}" maxDepth="2">
            <IfFileName glob="*/error.log.*" />
            <IfLastModified age="30d" />
        </Delete>
    </DefaultRolloverStrategy>
</RollingFile>

3. Loggers 日志記錄器配置

Root Logger 配置

<Root level="INFO">
    <AppenderRef ref="Console" />
    <AppenderRef ref="AppLogFile" />
    <AppenderRef ref="AlertLogFile" />
    <AppenderRef ref="ErrorLogFile" />
</Root>

異步日志記錄器配置

<AsyncLogger name="event" level="ALL" additivity="false">
    <AppenderRef ref="EventLogFile" />
</AsyncLogger>

特定包的日志級別配置

<logger name="com.apache.ibatis" level="TRACE"/>
<logger name="java.sql.Connection" level="DEBUG"/>
<logger name="java.sql.Statement" level="DEBUG"/>
<logger name="java.sql.PreparedStatement" level="DEBUG"/>
<logger name="com.cisdi.colmet.core.mapper" level="DEBUG"/>

3. Loggers 日志記錄器配置

1. 異步日志配置

為了獲得更好的性能,可以使用異步日志記錄:

  • 在根節(jié)點添加 packages="com.lmax.disruptor" 屬性
  • 使用 <AsyncLogger><AsyncRoot> 進行異步日志記錄

2. 日志追蹤ID配置

配置中的 %X{TRACE_ID} 允許在日志中加入分布式追蹤ID,方便問題定位。

3. 文件清理策略

配置中的 <Delete> 元素定義了日志文件的自動清理策略,保留最近30天的日志文件。

4. 性能優(yōu)化建議

  1. 合理設置日志級別,避免輸出過多調(diào)試信息
  2. 使用異步日志記錄提高性能
  3. 合理設置日志文件大小和保留策略
  4. 定期監(jiān)控日志磁盤使用情況

4、log4j2.xml 完整配置

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN" monitorInterval="600">
    <Properties>
        <!--<property name="LOG_HOME" value="${sys:user.home}/home/logs"/>-->
        <!--<property name="LOG_HOME" value="D:\doc\log"/>-->
        <property name="LOG_HOME" value="./logs"/>
        <property name="APP_CODE" value="file_log"/>
        <property name="LOG_LEVEL_PATTERN" value="%-5p"/>
        <property name="INSTANCE_INFO_PATTERN" value="${hostName} | ${sys:user.name}"/>
        <property name="CODE_INFO_PATTERN" value="%pid:%F:%L"/>
        <property name="LOG_DATEFORMAT_PATTERN" value="yyyy-MM-dd HH:mm:ss.SSS"/>
        <property name="APP_LOG_PATTERN" value="%d{${LOG_DATEFORMAT_PATTERN}} | ${LOG_LEVEL_PATTERN} | %X{TRACE_ID}  | %t | ${CODE_INFO_PATTERN} | [%X{seq}] - %m%n"/>
        <property name="LOG_PATTERN" value="%d{${LOG_DATEFORMAT_PATTERN}} | %X{TRACE_ID} | ${LOG_LEVEL_PATTERN} | ${INSTANCE_INFO_PATTERN} | FEIA | FLEP-INAPP | %t | ${CODE_INFO_PATTERN} | %m%n"/>
        <property name="ALERT_LOG_PATTERN" value="%d{${LOG_DATEFORMAT_PATTERN}} $${ctx:traceId:-} | ${INSTANCE_INFO_PATTERN} | [%X{seq}] - %m%n"/>
    </Properties>
    <Appenders>
        <!--控制臺輸出的相關配置-->
        <Console name="Console" target="SYSTEM_OUT" follow="true">
            <PatternLayout pattern="%d{${LOG_DATEFORMAT_PATTERN}} | ${LOG_LEVEL_PATTERN} | %t | %c:%L | [%X{seq}] - %m%n" />
        </Console>
        <!--打印所有的info及以下的級別的信息,每次超過size,則這size大小的日志會自動存入年份-月份創(chuàng)建的文件夾下進行壓縮存檔-->
        <RollingFile name="EventLogFile" fileName="${LOG_HOME}/event.log" immediateFlush="true"
                     filePattern="${LOG_HOME}/%d{yyyyMMdd}/event.log.%i">
            <PatternLayout>
                <Pattern>${LOG_PATTERN}</Pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
                <SizeBasedTriggeringPolicy size="50MB"/>
            </Policies>
            <!--保留最近30天的日志-->
            <DefaultRolloverStrategy>
                <Delete basePath="${LOG_HOME}" maxDepth = "2">
                    <IfFileName glob = "*/event.log.*" />
                    <IfLastModified age = "30d" />
                </Delete>
            </DefaultRolloverStrategy>
        </RollingFile>
        <RollingFile name="AppLogFile" fileName="${LOG_HOME}/app.log" immediateFlush="true"
                     filePattern="${LOG_HOME}/%d{yyyyMMdd}/app.log.%i">
            <PatternLayout>
                <Pattern>${APP_LOG_PATTERN}</Pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
                <SizeBasedTriggeringPolicy size="50MB"/>
            </Policies>
            <!--保留最近30天的日志-->
            <DefaultRolloverStrategy>
                <Delete basePath="${LOG_HOME}" maxDepth = "2">
                    <IfFileName glob = "*/app.log.*" />
                    <IfLastModified age = "30d" />
                </Delete>
            </DefaultRolloverStrategy>
        </RollingFile>
        <RollingFile name="AlertLogFile" fileName="${LOG_HOME}/alert.log" immediateFlush="true"
                     filePattern="${LOG_HOME}/%d{yyyyMMdd}/alert.log.%i">
            <thresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout>
                <Pattern>${ALERT_LOG_PATTERN}</Pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
                <SizeBasedTriggeringPolicy size="50MB"/>
            </Policies>
            <DefaultRolloverStrategy>
                <Delete basePath="${LOG_HOME}" maxDepth = "2">
                    <IfFileName glob = "*/alert.log.*" />
                    <IfLastModified age = "30d" />
                </Delete>
            </DefaultRolloverStrategy>
        </RollingFile>
        <RollingFile name="ErrorLogFile" fileName="${LOG_HOME}/error.log" immediateFlush="true"
                     filePattern="${LOG_HOME}/%d{yyyyMMdd}/error.log.%i">
            <thresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout>
                <Pattern>${APP_LOG_PATTERN}</Pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
                <SizeBasedTriggeringPolicy size="50MB"/>
            </Policies>
            <DefaultRolloverStrategy>
                <Delete basePath="${LOG_HOME}" maxDepth = "2">
                    <IfFileName glob = "*/error.log.*" />
                    <IfLastModified age = "30d" />
                </Delete>
            </DefaultRolloverStrategy>
        </RollingFile>
    </Appenders>
    <Loggers>
        <Root level="INFO">
            <AppenderRef ref="Console" />
            <AppenderRef ref="AppLogFile" />
            <AppenderRef ref="AlertLogFile" />
            <AppenderRef ref="ErrorLogFile" />
        </Root>
        <AsyncLogger name="event" level="ALL" additivity="false">
            <AppenderRef ref="EventLogFile" />
        </AsyncLogger>
        <logger name="com.apache.ibatis" level="TRACE"/>
        <logger name="java.sql.Connection" level="DEBUG"/>
        <logger name="java.sql.Statement" level="DEBUG"/>
        <logger name="java.sql.PreparedStatement" level="DEBUG"/>
        <logger name="com.cisdi.colmet.core.mapper" level="DEBUG"/>
    </Loggers>
</Configuration>

五、總結(jié)

通過以上配置,我們可以構(gòu)建一個功能完善、性能優(yōu)異的 Log4j2 日志系統(tǒng)。這種配置不僅滿足了日常開發(fā)和運維需求,還提供了高性能的異步日志記錄能力。在實際項目中,可以根據(jù)具體需求調(diào)整日志級別、輸出格式和文件策略,以達到最佳的監(jiān)控和維護效果。

記住,良好的日志配置是系統(tǒng)穩(wěn)定運行和快速排錯的重要保障,合理的日志管理策略能夠顯著提升系統(tǒng)的可維護性和可觀測性。

到此這篇關于Spring Boot 日志配置詳解:log4j2.xml 的完整配置指南的文章就介紹到這了,更多相關Spring Boot log4j2.xml 日志配置內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java三個類加載器及它們的相互關系

    Java三個類加載器及它們的相互關系

    Java在需要使用類別的時候,才會將類別加載,Java的類別載入是由類別載入器(Class loader)來達到的,預設上,在程序啟動之后,主要會有三個類別加載器,文中詳細介紹了這三個類加載器,需要的朋友可以參考下
    2021-06-06
  • SpringAOP中的通知Advice解析

    SpringAOP中的通知Advice解析

    這篇文章主要介紹了SpringAOP中的通知Advice解析,AOP 中的通知是基于連接點業(yè)務邏輯的一種增強,Spring AOP 可以基于 XML 方式和基于注解方式定義,只是寫法不同,這里只使用注解的方式來講解通知的詳細用法,需要的朋友可以參考下
    2023-09-09
  • 淺談Java中的hashcode方法(推薦)

    淺談Java中的hashcode方法(推薦)

    本篇文章主要介紹了Java中的hashcode方法,詳細的介紹了hashCode方法的作用,具有一定的參考價值,有需要的可以了解一下。
    2016-12-12
  • SpringBoot使用JDBC獲取相關的數(shù)據(jù)方法

    SpringBoot使用JDBC獲取相關的數(shù)據(jù)方法

    這篇文章主要介紹了SpringBoot使用JDBC獲取相關的數(shù)據(jù)方法,JDBC與數(shù)據(jù)庫建立連接、發(fā)送 操作數(shù)據(jù)庫的語句并處理結(jié)果,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-03-03
  • Java實時日志輸出至前臺的實現(xiàn)步驟

    Java實時日志輸出至前臺的實現(xiàn)步驟

    在Java應用程序中實現(xiàn)將實時日志輸出至前臺(如Web頁面或桌面應用程序),通常涉及到幾個關鍵組件和技術的選擇,下面將詳細介紹如何使用Java實現(xiàn)實時日志輸出至前臺,并結(jié)合具體的實現(xiàn)技術和框架來說明,需要的朋友可以參考下
    2025-10-10
  • 基于Spring-AOP實現(xiàn)自定義分片工具詳解

    基于Spring-AOP實現(xiàn)自定義分片工具詳解

    隨著數(shù)據(jù)量的增長,在與其他系統(tǒng)交互時,批量接口會出現(xiàn)超時現(xiàn)象,發(fā)現(xiàn)原批量接口在實現(xiàn)時,沒有做分片處理。由于與其他系統(tǒng)交互比較多,一個一個接口去做分片優(yōu)化,改動量較大,所以考慮通過AOP解決此問題,感興趣的可以了解一下
    2022-11-11
  • java中實現(xiàn)創(chuàng)建目錄與創(chuàng)建文件的操作實例

    java中實現(xiàn)創(chuàng)建目錄與創(chuàng)建文件的操作實例

    用Java創(chuàng)建文件或目錄非常簡單,下面這篇文章主要給大家介紹了關于java中實現(xiàn)創(chuàng)建目錄與創(chuàng)建文件的操作實例,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-01-01
  • 關于Java雙大括號{{}}的具體使用

    關于Java雙大括號{{}}的具體使用

    本文主要介紹了關于Java雙大括號{{}}的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-07-07
  • REST架構(gòu)及RESTful應用程序簡介

    REST架構(gòu)及RESTful應用程序簡介

    這篇文章主要為大家介紹了REST架構(gòu)及RESTful的應用程序簡介,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-03-03
  • java.sql.SQLRecoverableException關閉的連接異常問題及解決辦法

    java.sql.SQLRecoverableException關閉的連接異常問題及解決辦法

    當數(shù)據(jù)庫連接池中的連接被創(chuàng)建而長時間不使用的情況下,該連接會自動回收并失效,就導致客戶端程序報“ java.sql.SQLException: Io 異常: Connection reset” 或“java.sql.SQLException 關閉的連接”異常問題,下面給大家分享解決方案,一起看看吧
    2024-03-03

最新評論

嘉定区| 保定市| 琼结县| 衡水市| 新闻| 云梦县| 正安县| 柏乡县| 蒙山县| 西和县| 金湖县| 南漳县| 云林县| 镇康县| 克东县| 故城县| 彩票| 沁源县| 丹寨县| 阳东县| 韶关市| 大名县| 巫溪县| 抚宁县| 博客| 会东县| 澄迈县| 绥棱县| 三河市| 桂东县| 年辖:市辖区| 陕西省| 嘉鱼县| 忻城县| 龙井市| 贵定县| 克拉玛依市| 加查县| 进贤县| 黎川县| 灵丘县|