亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Spring?Boot整合log4j2日志配置的詳細(xì)教程

 更新時(shí)間:2025年02月14日 09:25:32   作者:桃吱咬咬_  
這篇文章主要介紹了SpringBoot項(xiàng)目中整合Log4j2日志框架的步驟和配置,包括常用日志框架的比較、配置參數(shù)介紹、Log4j2配置詳解以及使用步驟,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下

前言

在項(xiàng)目推進(jìn)中,如果說第一件事是搭建 Spring 框架的話,那么第二件事情就是在 Sring 基礎(chǔ)上搭建日志框架,此篇文章是博主在學(xué)習(xí)過程中使用 Spring Boot 搭建項(xiàng)目時(shí)整合 Log4j2 日志的總結(jié)

一、常用日志框架

  • java.util.logging:是 JDK 在1.4版本中引入的 Java 原生日志框架
  • Log4j:Apache 的一個(gè)開源項(xiàng)目,可以控制日志信息輸送的目的地是控制臺(tái)、文件、GUI組件等
  • LogBack:是 Log4j 的一個(gè)改良版本
  • Log4j2:Log4j2 已經(jīng)不僅僅是 Log4j 的一個(gè)升級版本了,它從頭到尾都被重寫了

二、配置參數(shù)介紹

1. 日志級別

共有8個(gè)級別,按照從低到高為:All < Trace < Debug < Info < Warn < Error < Fatal < OFF

機(jī)制:如果一條日志信息的級別大于等于配置文件的級別,就記錄

  • All:最低等級的,用于打開所有日志記錄
  • Trace:追蹤,就是程序推進(jìn)一下,可以寫個(gè) trace 輸出
  • Debug:調(diào)試,指出細(xì)粒度信息事件,對調(diào)試應(yīng)用程序是非常有幫助的
  • Info:消息在粗粒度級別上突出強(qiáng)調(diào)應(yīng)用程序的運(yùn)行過程
  • Warn:輸出警告及 warn 以下級別的日志,有些信息不是錯(cuò)誤信息,但也要給程序員一些提示
  • Error:輸出錯(cuò)誤信息日志
  • Fatal:輸出每個(gè)嚴(yán)重的錯(cuò)誤,將會(huì)導(dǎo)致應(yīng)用程序的退出的日志
  • OFF:最高等級,用于關(guān)閉所有日志記錄

2. 輸出形式

  • CONSOLE(輸出到控制臺(tái))
  • FILE(輸出到文件)

3. 日志格式

  • SimpleLayout:以簡單的形式顯示
  • HTMLLayout:以 HTML 表格顯示
  • PatternLayout:自定義形式顯示

3.1 PatternLayout 自定義日志布局

Console 節(jié)點(diǎn)、File 節(jié)點(diǎn)、RollingFile 節(jié)點(diǎn)的子節(jié)點(diǎn),指定輸出格式,不設(shè)置默認(rèn)為:%m%n

屬性:

  • pattern:指定日志格式

自定義日志格式:

%d{yyyy-MM-dd HH:mm:ss, SSS}: 日志生產(chǎn)時(shí)間,輸出到毫秒的時(shí)間
%-5level: 輸出日志級別,-5表示左對齊并且固定輸出5個(gè)字符,如果不足在右邊補(bǔ)0
%p: 日志輸出格式
%c: logger的名稱(%logger)
%m : 日志內(nèi)容, 即 logger.info("message")
%n: 換行符
%C: Java類名(%F)
%L: 日志輸出所在行數(shù)
%M: 日志輸出所在方法名
%l: 輸出語句所在的行數(shù), 包括類名、方法名、文件名、行數(shù)
%t: 表示線程名(%thread)
hostName: 本地機(jī)器名
hostAddress: 本地ip地址

三、Log4j2 配置詳解

1. 根節(jié)點(diǎn) Configuration

log4j2.xml 的根節(jié)點(diǎn),有兩個(gè)屬性,兩個(gè)子節(jié)點(diǎn)

屬性:

  • status:用來指定 log4j 本身的打印日志的級別
  • monitorinterval:用來指定 log4j 自動(dòng)重新配置的監(jiān)測間隔時(shí)間,單位:s,最小是 5s

子節(jié)點(diǎn):

  • Appenders
  • Loggers (表明可以定義多個(gè) Appender 和 Logger)

2. Appenders 節(jié)點(diǎn)

Configuration 根節(jié)點(diǎn)的子節(jié)點(diǎn),常見的有三種子節(jié)點(diǎn):Console、File、RollingFile

2.1 Console 節(jié)點(diǎn)

Appenders 節(jié)點(diǎn)的子節(jié)點(diǎn),用來定義輸出到控制臺(tái)的 Appender

屬性:

  • name:用來指定 Appender 的名字
  • target:可選值 SYSTEM_OUT 或 SYSTEM_ERR。一般只設(shè)置默認(rèn):SYSTEM_OUT

子節(jié)點(diǎn):

  • PatternLayout:輸出格式,默認(rèn)值:%m%n

2.2 File 節(jié)點(diǎn)

Appenders 節(jié)點(diǎn)的子節(jié)點(diǎn),用來定義輸出到指定位置的文件的 Appender,一般用來測試輸出

屬性:

  • name:用來指定 Appender 的名字
  • fileName:指定輸出日志的目的文件帶全路徑的文件名

子節(jié)點(diǎn):

  • PatternLayout:輸出格式,默認(rèn)值:%m%n
  • ThresholdFilter:指定輸出級別

2.3 RollingFile 節(jié)點(diǎn)

Appenders 節(jié)點(diǎn)的子節(jié)點(diǎn),用來定義超過指定大小,自動(dòng)刪除舊的創(chuàng)建新的 Appender

屬性:

  • name:用來指定 Appender 的名稱
  • fileName:指定輸出日志的目的文件帶全路徑的文件名
  • filePattern:指定新建日志文件的名稱格式

子節(jié)點(diǎn):

  • ThresholdFilter:決定日志事件能否被輸出
  • PatternLayout:輸出格式,默認(rèn)值:%m%n
  • Policies:指定滾動(dòng)日志的策略,就是什么時(shí)候進(jìn)行新建日志文件輸出日志
  • DefaultRolloverStrategy:用來指定同一個(gè)文件夾下最多有幾個(gè)日志文件時(shí),開始刪除最舊的,創(chuàng)建新的日志文件(通過 max 屬性)

2.3.1 ThresholdFilter 節(jié)點(diǎn)

RollingFile 節(jié)點(diǎn)的子節(jié)點(diǎn),決定日志事件能否被輸出。過濾條件有三個(gè)值:ACCEPT (接受),DENY (拒絕) or NEUTRAL (中立)

屬性:

  • level:指定過濾日志的級別
  • onMatch:默認(rèn)值是 NEUTRAL
  • onMismatch:默認(rèn)值是 DENY

2.3.2 Policies 節(jié)點(diǎn)

RollingFile 節(jié)點(diǎn)的子節(jié)點(diǎn),指定滾動(dòng)日志的策略

子節(jié)點(diǎn):

  • TimeBasedTriggeringPolicy:基于時(shí)間的滾動(dòng)策略,interval 屬性用來指定多久滾動(dòng)一次,默認(rèn)是 1hour。modulate = true 用來調(diào)整時(shí)間
  • SizeBasedTriggeringPolicy:基于指定文件大小的滾動(dòng)策略,size 屬性用來定義每個(gè)日志文件的大小

2.3.3 ThresholdFilter 節(jié)點(diǎn)

3. Loggers 節(jié)點(diǎn)

Configuration 根節(jié)點(diǎn)的子節(jié)點(diǎn)

子節(jié)點(diǎn):

  • Root:用來指定項(xiàng)目的根日志,如果沒有單獨(dú)指定 Logger,那么就會(huì)默認(rèn)使用該 Root 日志輸出
  • Logger:用來單獨(dú)指定日志的形式,比如要為指定包下的 class 指定不同的日志級別等

3.1 Root 節(jié)點(diǎn)

Loggers 節(jié)點(diǎn)的子節(jié)點(diǎn)

屬性:

  • level:指定日志輸出級別

子節(jié)點(diǎn):

  • appender-ref:用來指定該日志輸出到哪個(gè) Appender,通過 ref 指定

3.2 Logger 節(jié)點(diǎn)

屬性:

  • level:指定日志輸出級別
  • name:用來指定該 Logger 所適用的類或者類所在的包全路徑,繼承自 Root 節(jié)點(diǎn)

子節(jié)點(diǎn):

  • appender-ref:用來指定該日志輸出到哪個(gè)Appender,通過 ref 指定

四、Log4j2 使用步驟

1. pom.xml 添加依賴

Spring Boot 默認(rèn)是用 logback 的日志框架的,所以需要排除 logback,不然會(huì)出現(xiàn) jar 依賴沖突的報(bào)錯(cuò)

<!-- web -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <!--去掉SpringBoot默認(rèn)配置-->
    <exclusions>
        <!--過濾系統(tǒng)默認(rèn)的logback日志-->
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<!-- Log4j2 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

2. 配置 log4j2.xml

在 resources 下新建 log4j2.xml 文件并寫入以下內(nèi)容:

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

<!--Configuration后面的status,這個(gè)用于設(shè)置log4j2自身內(nèi)部的信息輸出,可以不設(shè)置,當(dāng)設(shè)置成trace時(shí),你會(huì)看到log4j2內(nèi)部各種詳細(xì)輸出-->
<!--monitorInterval: Log4j能夠自動(dòng)檢測修改配置 文件和重新配置本身,設(shè)置間隔秒數(shù)-->
<configuration monitorInterval="5">
    <!--日志級別以及優(yōu)先級排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->

    <!-- 自己設(shè)置屬性,后面通過${}來訪問 -->
    <properties>
        <!--日志存放目錄-->
        <property name="LOG_HOME">log4j2-logs</property>
        <!--日志名稱-->
        <property name="LOG_NAME">patrick-blog-server</property>
        <!--日志格式-文件-->
        <property name="LOG_FORMAT">[%d{yyyy-MM-dd HH:mm:ss.SSS}] %p %t %c[%L] - %m %n</property>
        <!--日志格式-控制臺(tái)-->
        <property name="LOG_FORMAT_CONSOLE">%d{yyyy-MM-dd HH:mm:ss.SSS} %highlight{%-5level} [%t] %highlight{%c{1.}.%M(%L)}: %msg%n%throwable</property>
        <!--備份目錄- 根據(jù)年月建立文件夾 -->
        <property name="BACKUP_HOME">${LOG_HOME}/$${date:yyyy-MM}</property>
        <!--備份頻率-->
        <property name="BACK_HZ">%d{yyyy-MM-dd}</property>
    </properties>

    <appenders>
        <!--控制臺(tái)日志-->
        <console name="console" target="SYSTEM_OUT">
            <!--輸出日志的格式-->
            <PatternLayout pattern="${LOG_FORMAT_CONSOLE}" disableAnsi="false" noConsoleNoAnsi="false"/>
            <!--控制臺(tái)只輸出level及其以上級別的信息(onMatch),其他的直接拒絕(onMismatch)-->
            <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
        </console>

        <!--文件會(huì)打印出所有信息,這個(gè)log每次運(yùn)行程序會(huì)自動(dòng)清空,由append屬性決定,適合臨時(shí)測試用-->
        <File name="filelog" fileName="${LOG_HOME}/${LOG_NAME}/test.log" append="false">
            <PatternLayout pattern="${LOG_FORMAT}"/>
        </File>

        <!-- 這個(gè)會(huì)打印出所有的info及以下級別的信息,每次大小超過size,則這size大小的日志會(huì)自動(dòng)存入按年份-月份建立的文件夾下面并進(jìn)行壓縮,作為存檔-->
        <RollingFile name="infoLog" fileName="${LOG_HOME}/${LOG_NAME}/info.log" filePattern="${LOG_HOME}/${LOG_NAME}-INFO-%d{yyyy-MM-dd}_%i.log.gz">
            <!--控制臺(tái)只輸出level及以上級別的信息(onMatch),其他的直接拒絕(onMismatch)-->
            <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="${LOG_FORMAT}"/>
            <Policies>
                <!--interval屬性用來指定多久滾動(dòng)一次,默認(rèn)是1 hour-->
                <TimeBasedTriggeringPolicy interval="1"/>
                <SizeBasedTriggeringPolicy size="10MB"/>
            </Policies>
            <!-- DefaultRolloverStrategy屬性如不設(shè)置,則默認(rèn)為最多同一文件夾下7個(gè)文件開始覆蓋-->
            <DefaultRolloverStrategy max="15"/>
        </RollingFile>

        <!-- 這個(gè)會(huì)打印出所有的warn及以下級別的信息,每次大小超過size,則這size大小的日志會(huì)自動(dòng)存入按年份-月份建立的文件夾下面并進(jìn)行壓縮,作為存檔-->
        <RollingFile name="warnLog" fileName="${LOG_HOME}/${LOG_NAME}/warn.log" filePattern="${LOG_HOME}/${LOG_NAME}-WARN-%d{yyyy-MM-dd}_%i.log.gz">
            <!--控制臺(tái)只輸出level及以上級別的信息(onMatch),其他的直接拒絕(onMismatch)-->
            <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="${LOG_FORMAT}"/>
            <Policies>
                <!--interval屬性用來指定多久滾動(dòng)一次,默認(rèn)是1 hour-->
                <TimeBasedTriggeringPolicy interval="1"/>
                <SizeBasedTriggeringPolicy size="10MB"/>
            </Policies>
            <!-- DefaultRolloverStrategy屬性如不設(shè)置,則默認(rèn)為最多同一文件夾下7個(gè)文件開始覆蓋-->
            <DefaultRolloverStrategy max="15"/>
        </RollingFile>

        <!-- 這個(gè)會(huì)打印出所有的error及以下級別的信息,每次大小超過size,則這size大小的日志會(huì)自動(dòng)存入按年份-月份建立的文件夾下面并進(jìn)行壓縮,作為存檔-->
        <RollingFile name="errorLog" fileName="${LOG_HOME}/${LOG_NAME}/error.log" filePattern="${LOG_HOME}/${LOG_NAME}-ERROR-%d{yyyy-MM-dd}_%i.log.gz">
            <!--控制臺(tái)只輸出level及以上級別的信息(onMatch),其他的直接拒絕(onMismatch)-->
            <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="${LOG_FORMAT}"/>
            <Policies>
                <!--interval屬性用來指定多久滾動(dòng)一次,默認(rèn)是1 hour-->
                <TimeBasedTriggeringPolicy interval="1"/>
                <SizeBasedTriggeringPolicy size="10MB"/>
            </Policies>
            <!-- DefaultRolloverStrategy屬性如不設(shè)置,則默認(rèn)為最多同一文件夾下7個(gè)文件開始覆蓋-->
            <DefaultRolloverStrategy max="15"/>
        </RollingFile>

    </appenders>

    <!--Logger節(jié)點(diǎn)用來單獨(dú)指定日志的形式,比如要為指定包下的class指定不同的日志級別等。-->
    <!--然后定義loggers,只有定義了logger并引入的appender,appender才會(huì)生效-->
    <loggers>

        <!--過濾掉spring和mybatis的一些無用的DEBUG信息-->
        <logger name="org.mybatis" level="info" additivity="false">
            <AppenderRef ref="console"/>
        </logger>
        <!--監(jiān)控系統(tǒng)信息-->
        <!--若是additivity設(shè)為false,則子Logger 只會(huì)在自己的appender里輸出,而不會(huì)在父Logger 的appender里輸出。-->
        <Logger name="org.springframework" level="info" additivity="false">
            <AppenderRef ref="console"/>
        </Logger>

        <root level="info">
            <!-- 輸出到控制臺(tái) -->
            <appender-ref ref="console"/>
            <!-- 輸出到文件 -->
            <appender-ref ref="filelog"/>
            <appender-ref ref="infoLog"/>
            <appender-ref ref="warnLog"/>
            <appender-ref ref="errorLog"/>
        </root>
    </loggers>

</configuration>

3. 使用 lombok 工具簡化創(chuàng)建 Logger 類

使用 lombok 可以省略構(gòu)建 logger 實(shí)例的過程,用 @Slf4j 注解簡化開發(fā)

@Slf4j
public class LogTest {
  
  public static void main(String... args) {
    log.error("Something is warning here");
  }
  
}

總結(jié) 

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

相關(guān)文章

  • Java并發(fā)編程變量可見性避免指令重排使用詳解

    Java并發(fā)編程變量可見性避免指令重排使用詳解

    這篇文章主要為大家介紹了Java并發(fā)編程變量可見性避免指令重排使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • Java中管理資源的引用隊(duì)列相關(guān)原理解析

    Java中管理資源的引用隊(duì)列相關(guān)原理解析

    這篇文章主要介紹了Java中管理資源的引用隊(duì)列相關(guān)原理解析,涉及到Java的垃圾回收機(jī)制方面的知識(shí),需要的朋友可以參考下
    2015-12-12
  • java中復(fù)雜查詢sql語句該怎么寫

    java中復(fù)雜查詢sql語句該怎么寫

    我們知道在java連接數(shù)據(jù)庫之后,需要數(shù)據(jù)庫的sql語句,下面這篇文章主要給大家介紹了關(guān)于java中復(fù)雜查詢sql語句該怎么寫的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-11-11
  • Autowired的注入過程源碼解析

    Autowired的注入過程源碼解析

    這篇文章主要為大家介紹了Autowired的注入過程源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • Java集合中獲取數(shù)據(jù)前驅(qū)和后繼元素的實(shí)現(xiàn)

    Java集合中獲取數(shù)據(jù)前驅(qū)和后繼元素的實(shí)現(xiàn)

    使用一致性hash時(shí),如何找到一個(gè)hash值對應(yīng)的臨近節(jié)點(diǎn),可以使用集合中獲取數(shù)據(jù)的前驅(qū)和后繼元素實(shí)現(xiàn),所以本文給大家介紹了Java集合中獲取數(shù)據(jù)前驅(qū)和后繼元素的實(shí)現(xiàn),文中有相關(guān)的代碼示例供大家參考,需要的朋友可以參考下
    2024-05-05
  • SpringBoot整合MongoDB全過程

    SpringBoot整合MongoDB全過程

    這篇文章主要介紹了SpringBoot整合MongoDB全過程,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • 淺談spring aop的五種通知類型

    淺談spring aop的五種通知類型

    這篇文章主要介紹了淺談spring aop的五種通知類型,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-12-12
  • += 和 ++ 操作符區(qū)別簡單介紹

    += 和 ++ 操作符區(qū)別簡單介紹

    這篇文章主要介紹了+= 和 ++ 操作符區(qū)別簡單介紹的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-09-09
  • SpringBoot中的@RequestMapping注解的用法示例

    SpringBoot中的@RequestMapping注解的用法示例

    @RequestMapping注解是SpringBoot中最常用的注解之一,它可以幫助開發(fā)者定義和處理HTTP請求,本篇文章我們將詳細(xì)為大家介紹如何使用SpringBoot中的@RequestMapping注解,感興趣的同學(xué)跟著小編一起來學(xué)習(xí)吧
    2023-06-06
  • java正則匹配HTML中a標(biāo)簽里的中文字符示例

    java正則匹配HTML中a標(biāo)簽里的中文字符示例

    這篇文章主要介紹了java正則匹配HTML中a標(biāo)簽里的中文字符,涉及java中文正則及HTML元素操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2017-01-01

最新評論