SpringBoot整合Log4j2日誌框架

来源:https://www.cnblogs.com/lisong0626/p/18057016
-Advertisement-
Play Games

SpringBoot底層預設使用logback日誌框架。 切換使用Log4j2日誌框架。 pom.xml配置 <!-- web場景啟動器 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-b ...


SpringBoot底層預設使用logback日誌框架。
切換使用Log4j2日誌框架。

pom.xml配置

<!-- web場景啟動器 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
	<!-- 排除預設日誌框架 -->
    <exclusions>
        <exclusion>
            <artifactId>spring-boot-starter-logging</artifactId>
            <groupId>org.springframework.boot</groupId>
        </exclusion>
    </exclusions>
</dependency>
<!-- 添加log4j2日誌框架的場景啟動器 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

log4j2-spring.xml

文件命名固定log4j2-spring.xml,讓SpringBoot載入配置文件。
文件名為log4j2.xml,文件將繞過SpringBoot直接調用日誌框架。

<?xml version="1.0" encoding="UTF-8"?>
<!--
Configuration後面的status,這個用於設置log4j2自身內部的信息輸出,可以不設置,
當設置成trace時,可以看到log4j2內部各種詳細輸出
monitorInterval:Log4j能夠自動檢測修改配置文件和重新配置本身,設置間隔秒數
-->
<Configuration status="debug" monitorInterval="180" packages="com.evan" disableAnsi="false" >
    <!--日誌級別以及優先順序排序:
    OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL
    -->
    <properties>
        <!-- 文件日誌在當前項目目錄下 -->
        <property name="LOG_HOME">./logs</property>
        <!--文件日誌在當前項目所在磁碟的根目錄存儲-->
        <!--<property name="LOG_HOME">/logs</property>-->
        <!--文件日誌指定存儲地址-->
        <!--<property name="LOG_HOME">D:/logs</property>-->
        <!--日誌輸出格式 -->
        <property name="PATTERN">%date{YYYY-MM-dd HH:mm:ss,SSS} %level [%thread][%file:%line] - %msg%n%throwable</property>
    </properties>
    <Appenders>
        <!--*********************控制台日誌***********************-->
        <Console name="consoleAppender" target="SYSTEM_OUT">
            <!--控制台只輸出level及以上級別的信息(onMatch),其他的直接拒絕(onMismatch) -->
            <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
            <!--設置日誌格式及顏色-->
            <PatternLayout
                    pattern="%style{%d{ISO8601}}{bright,green} %highlight{%-5level} [%style{%t}{bright,blue}] %style{%C{}}{bright,yellow}: %msg%n%style{%throwable}{red}"
                     noConsoleNoAnsi="false"/>
        </Console>

        <!--*********************文件日誌***********************-->
        <!--all級別日誌-->
        <RollingFile name="allFileAppender"
                     fileName="${LOG_HOME}/all.log"
                     filePattern="${LOG_HOME}/$${date:yyyy-MM}/all-%d{yyyy-MM-dd}-%i.log.gz">
            <!--設置日誌格式-->
            <PatternLayout>
                <pattern>%d %p %C{} [%t] %m%n</pattern>
            </PatternLayout>
            <Policies>
                <!-- 設置日誌文件切分參數 -->
                <!--<OnStartupTriggeringPolicy/>-->
                <!--設置日誌基礎文件大小,超過該大小就觸發日誌文件滾動更新-->
                <SizeBasedTriggeringPolicy size="100MB"/>
                <!--設置日誌文件滾動更新的時間,依賴於文件命名filePattern的設置-->
                <TimeBasedTriggeringPolicy/>
            </Policies>
            <!--設置日誌的文件個數上限,不設置預設為7個,超過大小後會被覆蓋;依賴於filePattern中的%i-->
            <DefaultRolloverStrategy max="100"/>
        </RollingFile>

        <!--debug級別日誌-->
        <RollingFile name="debugFileAppender"
                     fileName="${LOG_HOME}/debug.log"
                     filePattern="${LOG_HOME}/$${date:yyyy-MM}/debug-%d{yyyy-MM-dd}-%i.log.gz">
            <Filters>
                <!--過濾掉info及更高級別日誌-->
                <ThresholdFilter level="info" onMatch="DENY" onMismatch="NEUTRAL"/>
            </Filters>
            <!--設置日誌格式-->
            <PatternLayout>
                <pattern>%d %p %C{} [%t] %m%n</pattern>
            </PatternLayout>
            <Policies>
                <!-- 設置日誌文件切分參數 -->
                <!--<OnStartupTriggeringPolicy/>-->
                <!--設置日誌基礎文件大小,超過該大小就觸發日誌文件滾動更新-->
                <SizeBasedTriggeringPolicy size="100MB"/>
                <!--設置日誌文件滾動更新的時間,依賴於文件命名filePattern的設置-->
                <TimeBasedTriggeringPolicy/>
            </Policies>
            <!--設置日誌的文件個數上限,不設置預設為7個,超過大小後會被覆蓋;依賴於filePattern中的%i-->
            <DefaultRolloverStrategy max="100"/>
        </RollingFile>

        <!--info級別日誌-->
        <RollingFile name="infoFileAppender"
                     fileName="${LOG_HOME}/info.log"
                     filePattern="${LOG_HOME}/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log.gz">
            <Filters>
                <!--過濾掉warn及更高級別日誌-->
                <ThresholdFilter level="warn" onMatch="DENY" onMismatch="NEUTRAL"/>
            </Filters>
            <!--設置日誌格式-->
            <PatternLayout>
                <pattern>%d %p %C{} [%t] %m%n</pattern>
            </PatternLayout>
            <Policies>
                <!-- 設置日誌文件切分參數 -->
                <!--<OnStartupTriggeringPolicy/>-->
                <!--設置日誌基礎文件大小,超過該大小就觸發日誌文件滾動更新-->
                <SizeBasedTriggeringPolicy size="100MB"/>
                <!--設置日誌文件滾動更新的時間,依賴於文件命名filePattern的設置-->
                <TimeBasedTriggeringPolicy/>
            </Policies>
            <!--設置日誌的文件個數上限,不設置預設為7個,超過大小後會被覆蓋;依賴於filePattern中的%i-->
            <!--<DefaultRolloverStrategy max="100"/>-->
        </RollingFile>

        <!--warn級別日誌-->
        <RollingFile name="warnFileAppender"
                     fileName="${LOG_HOME}/warn.log"
                     filePattern="${LOG_HOME}/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log.gz">
            <Filters>
                <!--過濾掉error及更高級別日誌-->
                <ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/>
            </Filters>
            <!--設置日誌格式-->
            <PatternLayout>
                <pattern>%d %p %C{} [%t] %m%n</pattern>
            </PatternLayout>
            <Policies>
                <!-- 設置日誌文件切分參數 -->
                <!--<OnStartupTriggeringPolicy/>-->
                <!--設置日誌基礎文件大小,超過該大小就觸發日誌文件滾動更新-->
                <SizeBasedTriggeringPolicy size="100 MB"/>
                <!--設置日誌文件滾動更新的時間,依賴於文件命名filePattern的設置-->
                <TimeBasedTriggeringPolicy/>
            </Policies>
            <!--設置日誌的文件個數上限,不設置預設為7個,超過大小後會被覆蓋;依賴於filePattern中的%i-->
            <DefaultRolloverStrategy max="100"/>
        </RollingFile>

        <!--error及更高級別日誌-->
        <RollingFile name="errorFileAppender"
                     fileName="${LOG_HOME}/error.log"
                     filePattern="${LOG_HOME}/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log.gz">
            <!--設置日誌格式-->
            <PatternLayout>
                <pattern>%d %p %C{} [%t] %m%n</pattern>
            </PatternLayout>
            <Policies>
                <!-- 設置日誌文件切分參數 -->
                <!--<OnStartupTriggeringPolicy/>-->
                <!--設置日誌基礎文件大小,超過該大小就觸發日誌文件滾動更新-->
                <SizeBasedTriggeringPolicy size="100 MB"/>
                <!--設置日誌文件滾動更新的時間,依賴於文件命名filePattern的設置-->
                <TimeBasedTriggeringPolicy/>
            </Policies>
            <!--設置日誌的文件個數上限,不設置預設為7個,超過大小後會被覆蓋;依賴於filePattern中的%i-->
            <DefaultRolloverStrategy max="100"/>
        </RollingFile>

        <!--json格式error級別日誌-->
        <RollingFile name="errorJsonAppender"
                     fileName="${LOG_HOME}/error-json.log"
                     filePattern="${LOG_HOME}/error-json-%d{yyyy-MM-dd}-%i.log.gz">
            <JSONLayout compact="true" eventEol="true" locationInfo="true"/>
            <Policies>
                <SizeBasedTriggeringPolicy size="100 MB"/>
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
            </Policies>
        </RollingFile>
    </Appenders>

    <Loggers>
        <!-- 根日誌設置 -->
        <Root level="debug">
            <AppenderRef ref="allFileAppender" level="all"/>
            <AppenderRef ref="consoleAppender" level="debug"/>
            <AppenderRef ref="debugFileAppender" level="debug"/>
            <AppenderRef ref="infoFileAppender" level="info"/>
            <AppenderRef ref="warnFileAppender" level="warn"/>
            <AppenderRef ref="errorFileAppender" level="error"/>
            <AppenderRef ref="errorJsonAppender" level="error"/>
        </Root>

        <Logger name="springfox" level="INFO"/>
        <!--spring日誌-->
        <Logger name="org.springframework" level="info"/>
        <!--druid數據源日誌-->
        <Logger name="druid.sql.Statement" level="info"/>
        <!-- mybatis日誌 -->
        <Logger name="com.mybatis" level="warn"/>
        <Logger name="org.hibernate" level="warn"/>
        <Logger name="com.zaxxer.hikari" level="info"/>
        <Logger name="org.quartz" level="info"/>
        <Logger name="com.ym.learn" level="debug"/>
    </Loggers>

</Configuration>

控制台日誌輸出信息

image

日誌文件生成

image

說明:日誌文件生成在當前項目下


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言: insert into t2 select * from t1; 這條語句會對查詢表 t1 加鎖嗎?不要輕易下結論。對GreatSQL的鎖進行研究之前,首先要確認一下事務的隔離級別,不同的事務隔離級別,鎖的表現是不一樣的。 實驗: 創建測試表t1,t2 greatsql> create ta ...
  • 金融業務產品授信準入、交易營銷等環節存在廣泛的風控訴求,隨著業務種類增多,傳統的專家規則、評分卡模型難以應付日趨複雜的風控場景。 在傳統風控以專家規則系統為主流應用的語境下,規則模型的入參習慣被稱為“變數”。基於專家規則的風險評估,存在規則觸發閾值難量化的特點,規則命中精準度提升存在瓶頸。 隨著機器 ...
  • 本文分享自華為雲社區《GaussDB資料庫SQL系列-動態語句》,作者:Gauss松鼠會小助手2。 一、前言 在資料庫中構建動態SQL語句是指根據不同的條件或參數創建不同的SQL語句。這通常是為了適應不同的業務需求,提高SQL的靈活性和效率。GaussDB資料庫是一款具備高性能、高可用性和高擴展性的 ...
  • 本文分享自華為雲社區《GaussDB跨雲容災:實現跨地域的資料庫高可用能力》,作者:GaussDB 資料庫。 金融、銀行業等對數據的安全有著較高的要求,同城容災建設方案,在絕大多數場景下可以保證業務數據的安全性,但是在極端情況下,如遇不可抗力因素等,要保證數據的安全性,就需要採取跨地域的容災方案。 ...
  • Ubuntu22.04安裝 本操作在虛擬機上 安裝Redis 1)更新系統 sudo apt update sudo apt upgrade 2)安裝Redis sudo apt install redis-server 3)測試Redis是否工作 redis-cli --version syste ...
  • Linux入門(五) 本篇文章主要講述下文件處理相關的命令 1: 顯示許可權 ls -lh 總用量 36K drwxrwxr-x 5 zh zh 4.0K 2月 28 16:47 app -rw-rw-r-- 1 zh zh 530 2月 22 18:25 build.gradle drwxrwxr- ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 開始之前 Composition API 可以說是Vue3的最大特點,那麼為什麼要推出Composition Api,解決了什麼問題? 通常使用Vue2開發的項目,普遍會存在以下問題: 代碼的可讀性隨著組件變大而變差 每一種代碼復用的方式 ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 一、Object.defineProperty 定義:Object.defineProperty() 方法會直接在一個對象上定義一個新屬性,或者修改一個對象的現有屬性,並返回此對象 為什麼能實現響應式 通過defineProperty 兩 ...
一周排行
    -Advertisement-
    Play Games
  • 最近做項目過程中,使用到了海康相機,官方只提供了C/C++的SDK,沒有搜尋到一個合適的封裝了的C#庫,故自己動手,簡單的封裝了一下,方便大家也方便自己使用和二次開發 ...
  • 前言 MediatR 是 .NET 下的一個實現消息傳遞的庫,輕量級、簡潔高效,用於實現進程內的消息傳遞機制。它基於中介者設計模式,支持請求/響應、命令、查詢、通知和事件等多種消息傳遞模式。通過泛型支持,MediatR 可以智能地調度不同類型的消息,非常適合用於領域事件處理。 在本文中,將通過一個簡 ...
  • 前言 今天給大家推薦一個超實用的開源項目《.NET 7 + Vue 許可權管理系統 小白快速上手》,DncZeus的願景就是做一個.NET 領域小白也能上手的簡易、通用的後臺許可權管理模板系統基礎框架。 不管你是技術小白還是技術大佬或者是不懂前端Vue 的新手,這個項目可以快速上手讓我們從0到1,搭建自 ...
  • 第1章:WPF概述 本章目標 瞭解Windows圖形演化 瞭解WPF高級API 瞭解解析度無關性概念 瞭解WPF體繫結構 瞭解WPF 4.5 WPF概述 ​ 歡迎使用 Windows Presentation Foundation (WPF) 桌面指南,這是一個與解析度無關的 UI 框架,使用基於矢 ...
  • 在日常開發中,並不是所有的功能都是用戶可見的,還在一些背後默默支持的程式,這些程式通常以服務的形式出現,統稱為輔助角色服務。今天以一個簡單的小例子,簡述基於.NET開發輔助角色服務的相關內容,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 第3章:佈局 本章目標 理解佈局的原則 理解佈局的過程 理解佈局的容器 掌握各類佈局容器的運用 理解 WPF 中的佈局 WPF 佈局原則 ​ WPF 視窗只能包含單個元素。為在WPF 視窗中放置多個元素並創建更貼近實用的用戶男面,需要在視窗上放置一個容器,然後在這個容器中添加其他元素。造成這一限制的 ...
  • 前言 在平時項目開發中,定時任務調度是一項重要的功能,廣泛應用於後臺作業、計劃任務和自動化腳本等模塊。 FreeScheduler 是一款輕量級且功能強大的定時任務調度庫,它支持臨時的延時任務和重覆迴圈任務(可持久化),能夠按秒、每天/每周/每月固定時間或自定義間隔執行(CRON 表達式)。 此外 ...
  • 目錄Blazor 組件基礎路由導航參數組件參數路由參數生命周期事件狀態更改組件事件 Blazor 組件 基礎 新建一個項目命名為 MyComponents ,項目模板的交互類型選 Auto ,其它保持預設選項: 客戶端組件 (Auto/WebAssembly): 最終解決方案裡面會有兩個項目:伺服器 ...
  • 先看一下效果吧: isChecked = false 的時候的效果 isChecked = true 的時候的效果 然後我們來實現一下這個效果吧 第一步:創建一個空的wpf項目; 第二步:在項目裡面添加一個checkbox <Grid> <CheckBox HorizontalAlignment=" ...
  • 在編寫上位機軟體時,需要經常處理命令拼接與其他設備進行通信,通常對不同的命令封裝成不同的方法,擴展稍許麻煩。 本次擬以特性方式實現,以兼顧維護性與擴展性。 思想: 一種命令對應一個類,其類中的各個屬性對應各個命令段,通過特性的方式,實現其在這包數據命令中的位置、大端或小端及其轉換為對應的目標類型; ...