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

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

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

前言

在項(xiàng)目推進(jìn)中,如果說(shuō)第一件事是搭建 Spring 框架的話,那么第二件事情就是在 Sring 基礎(chǔ)上搭建日志框架,此篇文章是博主在學(xué)習(xí)過(guò)程中使用 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è)升級(jí)版本了,它從頭到尾都被重寫了

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

1. 日志級(jí)別

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

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

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

2. 輸出形式

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

3. 日志格式

  • SimpleLayout:以簡(jiǎn)單的形式顯示
  • 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: 輸出日志級(jí)別,-5表示左對(duì)齊并且固定輸出5個(gè)字符,如果不足在右邊補(bǔ)0
%p: 日志輸出格式
%c: logger的名稱(%logger)
%m : 日志內(nèi)容, 即 logger.info("message")
%n: 換行符
%C: Java類名(%F)
%L: 日志輸出所在行數(shù)
%M: 日志輸出所在方法名
%l: 輸出語(yǔ)句所在的行數(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:用來(lái)指定 log4j 本身的打印日志的級(jí)別
  • monitorinterval:用來(lái)指定 log4j 自動(dòng)重新配置的監(jiān)測(cè)間隔時(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),用來(lái)定義輸出到控制臺(tái)的 Appender

屬性:

  • name:用來(lái)指定 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),用來(lái)定義輸出到指定位置的文件的 Appender,一般用來(lái)測(cè)試輸出

屬性:

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

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

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

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

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

屬性:

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

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

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

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

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

屬性:

  • level:指定過(guò)濾日志的級(jí)別
  • 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 屬性用來(lái)指定多久滾動(dòng)一次,默認(rèn)是 1hour。modulate = true 用來(lái)調(diào)整時(shí)間
  • SizeBasedTriggeringPolicy:基于指定文件大小的滾動(dòng)策略,size 屬性用來(lái)定義每個(gè)日志文件的大小

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

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

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

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

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

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

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

屬性:

  • level:指定日志輸出級(jí)別

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

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

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

屬性:

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

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

  • appender-ref:用來(lái)指定該日志輸出到哪個(gè)Appender,通過(guò) 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>
        <!--過(guò)濾系統(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)檢測(cè)修改配置 文件和重新配置本身,設(shè)置間隔秒數(shù)-->
<configuration monitorInterval="5">
    <!--日志級(jí)別以及優(yōu)先級(jí)排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->

    <!-- 自己設(shè)置屬性,后面通過(guò)${}來(lái)訪問(wèn) -->
    <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及其以上級(jí)別的信息(onMatch),其他的直接拒絕(onMismatch)-->
            <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
        </console>

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

        <!-- 這個(gè)會(huì)打印出所有的info及以下級(jí)別的信息,每次大小超過(guò)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及以上級(jí)別的信息(onMatch),其他的直接拒絕(onMismatch)-->
            <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="${LOG_FORMAT}"/>
            <Policies>
                <!--interval屬性用來(lái)指定多久滾動(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及以下級(jí)別的信息,每次大小超過(guò)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及以上級(jí)別的信息(onMatch),其他的直接拒絕(onMismatch)-->
            <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="${LOG_FORMAT}"/>
            <Policies>
                <!--interval屬性用來(lái)指定多久滾動(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及以下級(jí)別的信息,每次大小超過(guò)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及以上級(jí)別的信息(onMatch),其他的直接拒絕(onMismatch)-->
            <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="${LOG_FORMAT}"/>
            <Policies>
                <!--interval屬性用來(lái)指定多久滾動(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)用來(lái)單獨(dú)指定日志的形式,比如要為指定包下的class指定不同的日志級(jí)別等。-->
    <!--然后定義loggers,只有定義了logger并引入的appender,appender才會(huì)生效-->
    <loggers>

        <!--過(guò)濾掉spring和mybatis的一些無(wú)用的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 工具簡(jiǎn)化創(chuàng)建 Logger 類

使用 lombok 可以省略構(gòu)建 logger 實(shí)例的過(guò)程,用 @Slf4j 注解簡(jiǎn)化開發(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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解使用JRebel插件實(shí)現(xiàn)SpringBoot應(yīng)用代碼熱加載

    詳解使用JRebel插件實(shí)現(xiàn)SpringBoot應(yīng)用代碼熱加載

    這篇文章主要介紹了詳解使用JRebel插件實(shí)現(xiàn)SpringBoot應(yīng)用代碼熱加載,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • Java提效神器Stream的一些冷門技巧匯總

    Java提效神器Stream的一些冷門技巧匯總

    這篇文章主要給大家介紹了關(guān)于Java提效神器Stream的一些冷門技巧,Stream是java對(duì)集合操作的優(yōu)化,相較于迭代器,使用Stream的速度非常快,并且它支持并行方式處理集合中的數(shù)據(jù),默認(rèn)情況能充分利用cpu的資源,需要的朋友可以參考下
    2021-07-07
  • Java字符串拼接的優(yōu)雅方式實(shí)例詳解

    Java字符串拼接的優(yōu)雅方式實(shí)例詳解

    字符串拼接一般使用“+”,但是“+”不能滿足大批量數(shù)據(jù)的處理,下面這篇文章主要給大家介紹了關(guān)于Java字符串拼接的幾種優(yōu)雅方式,需要的朋友可以參考下
    2021-07-07
  • 在Java中實(shí)現(xiàn)線程安全的單例模式的常見方式

    在Java中實(shí)現(xiàn)線程安全的單例模式的常見方式

    單例模式是一種常用的軟件設(shè)計(jì)模式,它確保一個(gè)類只有一個(gè)實(shí)例,并提供一個(gè)全局訪問(wèn)點(diǎn),在多線程環(huán)境下,確保單例模式的線程安全性是非常重要的,因?yàn)槎鄠€(gè)線程可能會(huì)同時(shí)嘗試創(chuàng)建實(shí)例,導(dǎo)致實(shí)例不唯一的問(wèn)題,本文介紹了在Java中實(shí)現(xiàn)線程安全的單例模式有幾種常見的方式
    2024-09-09
  • base64_encode和base64_decode的JAVA實(shí)現(xiàn)

    base64_encode和base64_decode的JAVA實(shí)現(xiàn)

    Base64 編碼其實(shí)是將3個(gè)8位字節(jié)轉(zhuǎn)換為4個(gè)6位這4個(gè)六位字節(jié) 其實(shí)仍然是8位,只不過(guò)高兩位被設(shè)置為0. 當(dāng)一個(gè)字節(jié)只有6位有效時(shí),它的取值空間為0 到 2的6次方減1 即63,也就是說(shuō)被轉(zhuǎn)換的Base64編碼的每一個(gè)編碼的取值空間為(0~63).需要的朋友可以參考下
    2016-04-04
  • java實(shí)現(xiàn)順序結(jié)構(gòu)線性列表的函數(shù)代碼

    java實(shí)現(xiàn)順序結(jié)構(gòu)線性列表的函數(shù)代碼

    java實(shí)現(xiàn)順序結(jié)構(gòu)線性列表的函數(shù)代碼。需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助
    2013-10-10
  • 用Java生成二維碼并附帶文字信息

    用Java生成二維碼并附帶文字信息

    這篇文章主要介紹了用Java生成二維碼并附帶文字信息,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • SpringBoot RestTemplate 簡(jiǎn)單包裝解析

    SpringBoot RestTemplate 簡(jiǎn)單包裝解析

    這篇文章主要介紹了SpringBoot RestTemplate 簡(jiǎn)單包裝解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • Java在高并發(fā)場(chǎng)景下實(shí)現(xiàn)點(diǎn)贊計(jì)數(shù)器

    Java在高并發(fā)場(chǎng)景下實(shí)現(xiàn)點(diǎn)贊計(jì)數(shù)器

    點(diǎn)贊計(jì)數(shù)器的本質(zhì)就是對(duì)某個(gè)變量在高并發(fā)情況下的修改,這篇文章主要為大家介紹了Java實(shí)現(xiàn)點(diǎn)贊計(jì)數(shù)器的示例代碼,感興趣的小伙伴可以了解一下
    2023-06-06
  • 詳解Java中的迭代迭代器Iterator與枚舉器Enumeration

    詳解Java中的迭代迭代器Iterator與枚舉器Enumeration

    Iterator與Enumeration分別是實(shí)現(xiàn)迭代器和枚舉器類的接口,下面就帶大家來(lái)詳解Java中的迭代迭代器Iterator與枚舉器Enumeration,以及它們之間的區(qū)別.
    2016-05-05

最新評(píng)論