springboot整合log4j2日志框架1

一? log4j基本知識

1.1 log4j的日志級別

Log4j定義了8個級別的log(除去OFF和ALL,可以說分為6個級別),優先級依次為:All,trace,debug,info,warn,error,fatal,off。

當日志級別設置為某個值的時候,低于它的日志信息將不會被記錄,只有高于設置的級別的信息會被記錄。

【ALL】:最低等級的,用于打開所有日志記錄。

【Trace】:很低日志級別,一般很少使用

【Debug】:debug級別的主要輸出調試性質的內容,該級別日志主要用于在開發、測試階段輸出,該級別的日志應盡可能地詳盡,便于在開發、測試階段出現問題或者異常時,對齊進行分析。

【Info】:INFO日志主要記錄系統關鍵信息,旨在保留系統正常工作期間關鍵運行指標,開發人員可以將初始化系統配置、業務狀態變化信息,或者用戶業務流程中的核心處理記錄到INFO日志中,方便日常運維工作以及錯誤回溯時上下文場景復現。建議在項目完成后,在測試環境將日志級別調成 INFO,然后通過 INFO 級別的信息看看是否能了解這個應用的運用情況,如果出現問題后是否這些日志能否提供有用的排查問題的信息。

【warn】:warn級別的主要輸出警告性質的內容,這些內容是可以預知且是有規劃的,比如,某個方法入參為空或者該參數的值不滿足運行該方法的條件時,在warn級別時應輸出較為詳盡的信息,以便于事后對日志進行分析。

【error】:error級別主要對于一些不可預知的信息,如,錯誤,異常等,比如,在catch快中捕獲的網絡通信,數據庫連接等異常,如果異常對系統的整個流程影響不大,可以使用warn級別日志輸出。在輸出error級別的日志時,盡量多地輸出方法入參數、方法執行過程中產生的對象等數據,在帶有錯誤、異常對象的數據時,需要將該對象一并輸出。

【fatal】:指出每個嚴重的錯誤事件,將會導致應用程序的退出,這個級別比較高了。重大錯誤,這種級別你可以直接停止程序了。【1】https://blog.csdn.net/wsskl/article/details/137580290

【OFF】:最高等級的,用于關閉所有日志記錄。

1.2?log4j的日志文件結構*

1.2.1 概述

Log4j的日志文件主要結構:Loggers(記錄器),Appenders (輸出源)和Layouts(布局)。這里可簡單理解為日志類別,日志要輸出的地方和日志以何種形式輸出

1.properties: 定義一些變量,如日志格式,路徑等。

2.Appenders:定義日志輸出的目標位置,如控制臺,文件等。

3.Loggers:定義日志記錄器,控制日志的輸出級別和目標。

4.filters:定義過濾條件,控制日志輸出。

其中<configuration>標簽的status屬性用于設置log4j2自身jar里代碼的日志輸出級別。將status設置為debug可以獲得更詳細的內部日志輸出,這對于調試和問題排查非常有幫助。

5.完整的結構

1.2.2 詳解

Loggers(記錄器):Loggers組件被分為7個級別,優先級從低到高:all、debug、info、warn、error、fatal、off。任何一個級別只輸出本級別以及它級別以上的級別內容。

Appends(輸出源):Log4j允許把日志輸出到不同的地方,如控制臺(Console)、文件(Files)等。

Layout(布局):Layout的作用是控制Log信息的輸出方式,也就是格式化輸出的信息。

1根節點Configuration有兩個屬性status和monitorinterval,有兩個子節點:Appenders和Loggers(表明可以定義多個 Appender和Logger):

status用來指定log4j本身的打印日志的級別。

monitorinterval用于指定log4j自動重新配置的監測間隔時間,單位是s,最小是5s

2.Appenders節點,常見的有三種子節點:Console、RollingFile、File:

1)Console節點用來定義輸出到控制臺的Appender

???name:指定 Appender 的名字

???target:SYSTEM_OUT 或SYSTEM_ERR,一般只設置默認:SYSTEM_OUT

???PatternLayout:輸出格式,不設置默認為%m%n

2)File節點用來定義輸出到指定位置的文件的Appender

????name:指定Appender的名字

????fileName:指定輸出日志的目的文件帶全路徑的文件名

????PatternLayout:輸出格式,不設置默認為%m%n

3)RollingFile節點用來定義超過指定大小自動刪除舊的創建新的的Appender

name:指定Appender的名字

fileName:指定輸出日志的目的文件帶全路徑的文件名

PatternLayout:輸出格式,不設置默認為%m%n

filePattern:指定新建日志文件的名稱格式

Policies:指定滾動日志的策略,就是什么時候進行新建日志文件輸出日志

TimeBasedTriggeringPolicy:Policies子節點,基于時間的滾動策略,interval屬性用來指定多久滾動一次,默認是1 hour。modulate=true用來調整時間:比如現在是早上3am,interval是4,那么第一次滾動是在4am,接著是8am,12am...而不是7am

SizeBasedTriggeringPolicy:Policies子節點,基于指定文件大小的滾動策略,size 屬性用來定義每個日志文件的大小。

DefaultRolloverStrategy:用來指定同一個文件夾下最多有幾個日志文件時開始刪除最舊的,創建新的(通過max屬性)。

3.Loggers節點,常見的有兩種Root和Logger:

1)root節點用來指定項目的根日志,如果沒有單獨指定 Logger,那么就會默認使用該 Root日志輸出

level:日志輸出級別,共有8個級別,按照從低到高為:All < Trace < Debug < Info < Warn < Error < Fatal < OFF

AppenderRef:Root的子節點,用來指定該日志輸出到哪個Appender子節點的ref屬性也就是前面的RollingFile中指定的name名稱,子節點的level也是日志輸出級別。

2)logger節點用來單獨指定日志的形式,比如要為指定包下的class指定不同的日志級別等。每個logger可以指定一個level(TRACE, DEBUG, INFO, WARN, ERROR, ALL or OFF),不指定時level默認為ERROR。

level:日志輸出級別,共有8個級別,按照從低到高為:All < Trace < Debug < Info < Warn < Error < Fatal < OFF

name:用來指定該 Logger所適用的類或者類所在的包全路徑,繼承自 Root節點.

AppenderRef:Logger的子節點,用來指定該日志輸出到哪個Appender,如果沒有指定,就會默認繼承自 Root如果指定了,那么會在指定的這個Appender和 Root的Appender中都會輸出,此時我們可以設置 Logger的 additivity="false"只在自定義的 Appender中進行輸出。

案例配置:

1.3?log4j的日志格式化api

1.3.1 api詳解

??log4j - 輸出格式控制, PatternLayout參數含義以及詳細配置 - frank_cui - 博客園?

1.3.2 演示案例

1.查看 %l

2. 查看%L

2. 查看%L

3查看%msg

?1.3.3 演示案例

%L,%line:顯示日志輸出的代碼所在的行數。Log4j在輸出行號時會檢查堆棧信息,是耗時的操作。

%c{precision},%logger{precision}:

logger名稱,precision可以是一個正整數、負整數、"1."、"1.1.."、"."等格式,用于指定輸出的logger的名稱的層級和詳細程度。

%C{precision},%class{precision}:輸出調用者的權限定類名,precision的規則與logger名稱的用法相同。Log4j在輸出類名時會檢查堆棧信息,是耗時的操作,建議使用%c{precision}或%logger{precision}代替。

%d{pattern},%date{pattern}:輸出日志事件的時間,pattern經常包含若干對包含時間/日期格式(SimpleDateFormat)的花括號。

?

%m,%msg:輸出應用中自定義的日志內容;

%M,%method:輸出方法名。Log4j在輸出行號時會檢查堆棧信息,是耗時的操作;

%n:輸出當前運行平臺所用的換行符,一般放在末尾;

%p|level{level=label, level=label, ...},%p|level{length=n}%p|level{lowerCase=true|false}:

輸出日志的級別。可以每個日志級別指定別名,如%level{WARN=W, DEBUG=D, ERROR=E, TRACE=T, INFO=I},%level{length=1}也可以實現同樣的效果,如果length的值超過了日志級別的名稱,那么使用正常的日志級別名稱。

level=label和length=n可以組合使用,如%level{ERROR=Error, length=2}為ERROR級別指定了別名,為其他日志級別限定了長度。此外,還可以指定級別的大小寫。

%T,%tid,%threadId:輸出日志的線程號,非常有必要;

%t,%tn,%thread,%threadName:輸出日志的線程名稱,類似于線程號作用相同,可選擇其中一個https://blog.csdn.net/qq_34253002/article/details/129821103

1.4?log4j中onmatch和onmismatch的區別*

1.4.1 案例

表示匹配級別info以上的則輸出,info級別以下的不匹配則忽略。

1.4.2 onmatch的api

OnMatch和onMismatch都有3個屬性值,分別為ACCEPT,deny和neutal

Onmatch

Onmismatch

Accept:匹配該級別以上

Accept:匹配該級別以下

Deny:不匹配該級別以上

Deny:不匹配該級別以下

Neutral:該級別以上的,由下一個filter處理,如果當前是最后一個,則表示匹配該級別以上。

該級別以及以下的,由下一個filter處理,如果當前是最后一個,則不匹配該級別以下的。

Log4j2的onMatch和onMismatch屬性值詳解-CSDN博客

在log4j2中,日志級別從低到高依次為: all,trace,debug,info,warn,error,fatal,off。

當設置onMismatch=neutal時,當前過濾器不會對日志事件做出接受或拒絕的決定,而是將事件傳遞給下一個過濾器處理,如果當前過濾器是最后一個那么不匹配當前日志級別以下的事件將被忽略。

例如,第一個過濾器level設置為error且onmatch為deny,onmismatch=accept,這意味著會輸出error以下級別(warn,info,debug,trace)的日志,

當onmismatch=netral,則這些日志事件會繼續傳遞給下一個過濾器處理,而不是被當前過濾器直接處理或者忽略掉。

1.5?logback,log4j2和slf4j的區別

1)SLF4J: 是一個日志門面(抽象層),不是具體實現;提供統一的日志接口,允許用戶在部署時選擇不同的日志實現;支持多個日志實現:logback、log4j、java.util.logging等

2)Log4j: Apache的開源日志實現;Log4j 1.x已經停止維護;Log4j 2.x是完全重寫的版本

3)Logback; Log4j創始人開發的新一代日志框架;作為Log4j的繼承者,是SLF4J的原生實現。深入解析Java日志框架:Logback、Log4j 2與SLF4J的區別與使用指南_slf4j logback-CSDN博客4)推薦使用方案:

1. SLF4J + Logback(首選)

2. SLF4J + Log4j2(備選)

5)為什么選用log4j2

相比與其他的日志系統,log4j2丟數據這種情況少;disruptor技術,在多線程環境下,性能高于logback等10倍以上;利用jdk1.5并發的特性,減少了死鎖的發生;https://blog.csdn.net/weixin_44001965/article/details/143703014

對于Java工程師來說,關于日志工具的使用,最佳實踐就是在應用中使用。如log4j2 + slf4j這樣的組合來進行日志輸出。這樣做的最大好處,就是業務層的開發不需要關心底層日志框架的實現及細節,在編碼的時候也不需要考慮日后更換框架所帶來的成本。這也是日志接口(門面模式)所帶來的好處。

Log4j2使用詳解

1.6?log4j2的異常日志格式配置

https://blog.csdn.net/sz85850597/article/details/120572827

?

1.7?log4j2的異步日志配置

https://blog.51cto.com/1936625305/11823448

<loggers>

????<!--includeLocation 打印行號,如果這里不設置,就算%L 也不會打印行號-->

????<AsyncRoot level="DEBUG" includeLocation="true" >

????????<AppenderRef ref="CONSOLE"/>

????</AsyncRoot>

????<AsyncLogger?name="com.luna" level="INFO" includeLocation="true" >

????????<appender-ref ref="FILE-INFO"/>

????????<appender-ref ref="FILE-ERROR"/>

????</AsyncLogger>

????<AsyncLogger name="druid.sql.Statement" level="DEBUG" additivity="false" includeLocation="true" >

????????<appender-ref ref="CONSOLE"/>

????????<appender-ref ref="FILE-INFO"/>

????</AsyncLogger>

</loggers>

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/64340.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/64340.shtml
英文地址,請注明出處:http://en.pswp.cn/web/64340.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Spring源碼_05_IOC容器啟動細節

前面幾章&#xff0c;大致講了Spring的IOC容器的大致過程和原理&#xff0c;以及重要的容器和beanFactory的繼承關系&#xff0c;為后續這些細節挖掘提供一點理解基礎。掌握總體脈絡是必要的&#xff0c;接下來的每一章都是從總體脈絡中&#xff0c; 去研究之前沒看的一些重要…

WPF使用OpenCvSharp4

WPF使用OpenCvSharp4 創建項目安裝OpenCvSharp4 創建項目 安裝OpenCvSharp4 在解決方案資源管理器中&#xff0c;右鍵單擊項目名稱&#xff0c;選擇“管理 NuGet 包”。搜索并安裝以下包&#xff1a; OpenCvSharp4OpenCvSharp4.ExtensionsOpenCvSharp4.runtime.winSystem.Man…

leetcode 3083. 字符串及其反轉中是否存在同一子字符串 簡單

給你一個字符串 s &#xff0c;請你判斷字符串 s 是否存在一個長度為 2 的子字符串&#xff0c;在其反轉后的字符串中也出現。 如果存在這樣的子字符串&#xff0c;返回 true&#xff1b;如果不存在&#xff0c;返回 false 。 示例 1&#xff1a; 輸入&#xff1a;s "…

TCP-UDP調試工具推薦:Socket通信測試教程(附詳細圖解)

前言 在網絡編程與應用開發中&#xff0c;調試始終是一項不可忽視的重要環節。尤其是在涉及TCP/IP、UDP等底層網絡通信協議時&#xff0c;如何確保數據能夠準確無誤地在不同節點間傳輸&#xff0c;是許多開發者關注的核心問題。 調試的難點不僅在于定位連接建立、數據流控制及…

Vue.js框架:在線教育系統的安全性與穩定性

2.1系統開發使用的關鍵技術 本系統在開發中選擇B/S框架進行設計&#xff0c;語言采用Java&#xff0c;數據庫采用Mysql&#xff0c;并在設計中加入VUE.js技術&#xff0c;本系統的運行環境為Idea。 2.2 VUE.js技術介紹 VUE.js是一個用來開發前臺界面的JavaScript框架&#xff0…

【新方法】通過清華鏡像源加速 PyTorch GPU 2.5安裝及 CUDA 版本選擇指南

下面詳細介紹所提到的兩條命令&#xff0c;它們的作用及如何在你的 Python 環境中加速 PyTorch 等庫的安裝。 1. 設置清華鏡像源 pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple這條命令的作用是將 pip &#xff08;Python 的包管理工具&#xf…

【數據結構】單鏈表的使用

單鏈表的使用 1、基本概念2、鏈表的分類3、鏈表的基本操作a、單鏈表節點設計b、單鏈表初始化c、單鏈表增刪節點**節點頭插&#xff1a;****節點尾插&#xff1a;****新節點插入指定節點后&#xff1a;**節點刪除&#xff1a; d、單鏈表修改節點e、單鏈表遍歷&#xff0c;并打印…

虛幻引擎是什么?

Unreal Engine&#xff0c;是一款由Epic Games開發的游戲引擎。該引擎主要是為了開發第一人稱射擊游戲而設計&#xff0c;但現在已經被成功地應用于開發模擬游戲、恐怖游戲、角色扮演游戲等多種不同類型的游戲。虛幻引擎除了被用于開發游戲&#xff0c;現在也用于電影的虛擬制片…

Linux(Centos 7.6)yum源配置

yum是rpm包的管理工具&#xff0c;可以自動安裝、升級、刪除軟件包的功能&#xff0c;可以自動解決軟件包之間的依賴關系&#xff0c;使得用戶更方便軟件包的管理。要使用yum必須要進行配置&#xff0c;個人將其分為三類&#xff0c;本地yum源、局域網yum源、第三方yum源&#…

Linux上更新jar包里的某個class文件

目標&#xff1a;替換voice-1.0.jar里的TrackHandler.class文件 一.查詢jar包里TrackHandler.class所在的路徑 jar -tvf voice-1.0.jar |grep TrackHandler 二.解壓出TrackHandler.class文件 jar -xvf voice-1.0.jar BOOT-INF/classes/com/yf/rj/handler/TrackHandler.cla…

機器學習中回歸預測模型中常用四個評價指標MBE、MAE、RMSE、R2解釋

在機器學習中&#xff0c;評估模型性能時常用的四個指標包括平均絕對誤差&#xff08;Mean Absolute Error, MAE&#xff09;、均方誤差&#xff08;Mean Squared Error, MSE&#xff09;、均方根誤差&#xff08;Root Mean Squared Error, RMSE&#xff09;和決定系數&#xf…

基于SpringBoot的Jwt認證以及密碼aes加密解密技術

目錄 前言 1.SpringBoot項目的創建 2.相關技術 3.項目架構 4.項目關鍵代碼 5.項目最終的運行效果 ?編輯 6.PostMan測試接口結果 前言 學習了SpringBoot之后&#xff0c;才覺得SpringBoot真的很方便&#xff0c;相比傳統的SSH&#xff0c;SSM&#xff0c;SpringBo…

uniapp下載打開實現方案,支持安卓ios和h5,下載文件到指定目錄,安卓文件管理內可查看到

uniapp下載&打開實現方案&#xff0c;支持安卓ios和h5 Android&#xff1a; 1、申請本地存儲讀寫權限 2、創建文件夾&#xff08;文件夾不存在即創建&#xff09; 3、下載文件 ios&#xff1a; 1、下載文件 2、保存到本地&#xff0c;需要打開文件點擊儲存 使用方法&…

77、將adaface的mtcnn模型npy文件轉成atlas310p模型,并進行推理

基本思想:將adaface的mtcnn模型npy文件轉成atlas310p模型進行推理。同時比對結果 ubuntu@ubuntu:~$ git clone https://github.com/mk-minchul/AdaFace.git Cloning into AdaFace... remote: Enumerating objects: 236, done. remote: Counting objects: 100% (109/109), don…

Spark SQL DML語句

【圖書介紹】《Spark SQL大數據分析快速上手》-CSDN博客 《Spark SQL大數據分析快速上手》【摘要 書評 試讀】- 京東圖書 Spark本地模式安裝_spark3.2.2本地模式安裝-CSDN博客 DML&#xff08;Data Manipulation Language&#xff0c;數據操作語言&#xff09;操作主要用來對…

農歷節日倒計時:基于Python的公歷與農歷日期轉換及節日查詢小程序

農歷節日倒計時&#xff1a;基于Python的公歷與農歷日期轉換及節日查詢小程序 摘要 又是一年春節即將到來&#xff0c;突然想基于Python編寫一個農歷節日的倒計時小程序。該程序能夠根據用戶輸入的農歷節日名稱&#xff0c;計算出距離該節日還有多少天。通過使用lunardate庫進…

線性直流電流

電阻網絡的等效 等效是指被化簡的電阻網絡與等效電阻具有相同的 u-i 關系 (即端口方程)&#xff0c;從而用等效電阻代替電阻網絡之后&#xff0c;不 改變其余部分的電壓和電流。 串聯等效&#xff1a; 并聯等效&#xff1a; 星角變換 若這兩個三端網絡是等效的&#xff0c;從任…

CDN(Content Delivery Network,內容分發網絡)

CDN&#xff08;Content Delivery Network&#xff0c;內容分發網絡&#xff09;是一種通過在網絡中部署分布式的服務器集群&#xff0c;將網站內容分發到最接近用戶的服務器節點&#xff0c;以提高用戶訪問速度和穩定性的重要網絡基礎設施。CDN的核心思想是讓用戶就近獲取所需…

B站推薦模型數據流的一致性架構

01 背景 推薦系統的模型&#xff0c;通過學習用戶歷史行為來達到個性化精準推薦的目的&#xff0c;因此模型訓練依賴的樣本數據&#xff0c;需要包括用戶特征、服務端推薦的視頻特征&#xff0c;以及用戶在推薦視頻上是否有一系列的消費行為。 推薦模型數據流&#xff0c;即為…

【LeetCode】839、相似字符串組

【LeetCode】839、相似字符串組 文章目錄 一、并查集1.1 并查集 二、多語言解法 一、并查集 1.1 并查集 求共有幾組, 聯想到并查集, 即并查集有幾個集合 字符串相似: 相差0個字符, 或2個字符 其中所有字符串長度都相同, 是比較方便處理的 // go var sets int var father […