Log4j

?通過Log4j,我們可以控制日志信息輸送到目的地是控制臺、文件、GUI組件,甚至是套接口服務器、NT的事件記錄器。我們可以控制每一條日志的輸出格式。通過定義每一條日志信息的級別,能更加細致地控制日志的生成過程。

1 log4j、log4j2與@SLF4J

2015年9月,Apache宣布不再維護Log4j。建議所有相關項目升級到Log4j2。Log4j2是Apache開發的一個新的日志框架,改進了Log4j的缺點,同時也借鑒了LogBack,號稱在性能上也完勝LogBack。

log4j

log4j2

配置文件

以.properties的文件為主。

采用的是.xml,.json或者.jsn

核心JAR包

只需引入一個jar包:log4j

需要兩個核心包:log4j-core和log4j-api

配置文件方式

兩者基本不同

表 log4j與log4j2在用法上的主要區別

SFL4J 全稱是Simple Logging Facade for Java(Java的簡單日志門面),是外觀模式的典型應用。

不同的日志框架,需要引入不同的jar包,及使用不同的代碼獲取Logger。如果項目升級需要更換不同的框架,那么就需要修改所有的地方來獲取新的Logger,這將產生巨大的工作量。

而SFL4J,運用門面外觀模式,提供一個接口,將不同的日志框架的使用統一起來。

圖 SLF4J 的工作原理

2 Log4J

級別標準是:ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATA < OFF。

ALL

所有級別包括自定義級別

WARN

用于警告消息。

TRACE

低于DEBUG。

ERROR

錯誤消息日志,應用程序可以繼續執行。

DEBUG

調試消息日志。

FATA

嚴重錯誤消息日志,必須中止運行程序。

INFO

信息消息。

OFF

最高級別,旨在關閉日志記錄。

表 Log4j 日志級別說明

圖 log4j的配置文檔結構

配置文檔主要有兩個標簽:<appender>用來配置日志輸出目標的信息。<root>更節點來配置日志輸出級別、輸出目標等信息。

3 appender

log輸出源,常用的輸出源有:ConsoleAppender(控制臺)、FileAppender(文件)、DailyRollingFileAppender(日常日志文件,FileAppender的子類)等。

這些輸出源公有等配置選項有:

1、Threshold,指定日志信息的最低輸出級別,默認DEBUG。

2、ImmediateFlush, 表示所有的消息都會被立即輸出,默認true。

ConsoleAppender

Target,輸出流,默認是System.out。

FileAppender

Append,表示增加到指定文件中,false則將消息覆蓋指定的文件內容,默認值是true。

File,當前消息輸出的文件地址

DailyRollingFileAppender

DatePattern,輸出頻率,yyy-MM 表示每月產生一個新的日志文件,命名規則是:文件名.后綴.yyyy-MM

RollingFileAppender

MaxFileSize,文件到達該大小時,將會自動產生一個新的日志文件,后綴可以是KB,MB或者GB。

MaxBackupIndex,可以產生的滾動文件最大數,假如設為2,則可產生app.log.1、app.log.2兩個滾動文件和app.log。

表 常見輸出源的相關配置

3.1 layout

配置日志信息的輸出格式的布局。常見的布局有:HTMLLayout(以HTML表格形式布局)、PatternLayout(可以靈活指定布局模式)、SimpleLayout(包含日志信息的級別和信息字符串)、TTCCLayout(包含日志產生的時間、線程、類別等信息)。

%p

日志信息的優先級,即DEBUG、INFO、WARN等。

%F

產生日志消息所在的文件名稱。

%d

輸出日志的時間,其后可以指定格式,如:%d{yyyy-MM-dd HH:mm:ss}。

%L

代碼中的行號。

%r

自應用程序啟動到輸出該log信息耗費到毫秒數。

%m

輸出代碼中指定的具體消息。比如log.warn(“hello”); 則輸出hello。

%t

產生該日志事件的線程名。

%n

一個回車換行符。

%l

日志事件發生位置,相當于%c.%M(%F:%L)的組合,包括類的全名、方法、文件名以及在代碼中的行數。

%x

輸出和當前線程相關聯的NDC(嵌套診斷環境)。

%c

產生日志信息所屬的類目。

%%

輸出一個%字符。

%M

產生日志信息的方法名。

表 PatternLayout 布局格式化符號說明

例如:%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

輸出:

2023-11-22 21:25:43 INFO? ?Application:25 – info

2023-11-22 21:25:43 WARN? Application:26 – warn

%-5 表示左對齊5個字符。

4 輸出實戰

log4j 日志可以輸出到文件、郵件及數據庫等。下面將大致介紹輸出到郵件及文件到用法。

4.1 輸出到郵件

首先,需要添加郵件發送的依賴:

<dependency>

<groupId>javax.mail</groupId>

<artifactId>mail</artifactId>

<version>1.4.7</version>

</dependency>

然后配置appender

圖 郵件appender配置

bufferSize,默認單位是kb。是指日志超過該大小后才會發送郵件(當程序停止時也會發送郵件)。

圖 log4j 發送的日志郵件

4.2 輸出到文件

圖 DailyRollingFileAppender C產生的日志文件

如圖所示,所產生的日志文件并不符合我們的期望,我們想得到的文件是: app.yyyy-MM-dd-HH-mm.log 這種格式的。這時需要我們自定義Appender。

我們需要先分析DailyRollingFileAppender這個類:

產生日志文件是在rollOver()這個方法發生的(這個方法官方注釋是:將當前文件滾動到新文件)。

圖 DailyRollingFileAppender 類的rollOver方法

因為rollOver方法我們沒法重寫,我們的Appender類不能直接繼承DailyRollingFileAppender類。我們重寫CustomDailyRollingFileAppender類,并繼承FileAppender。這個類相對于DailyRollingFileAppender,只需要修改兩處:

圖 修改activateOptions方法

圖 修改rollOver方法

圖 修改后生成的日志文件

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

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

相關文章

【Vue3從入門到項目實現】前置知識及Vue基礎

概念 理論基礎 MVC 架構&#xff08;以JavaWeb舉例&#xff09; M &#xff1a;Model&#xff0c;&#xff08;pojo、service、dao等&#xff09;V &#xff1a;View&#xff0c;&#xff08;JSP, HTML等&#xff09;C&#xff1a;Controller (servlet) MVVC 架構&#xff…

C/C++ 使用API實現數據壓縮與解壓縮

在Windows編程中&#xff0c;經常會遇到需要對數據進行壓縮和解壓縮的情況&#xff0c;數據壓縮是一種常見的優化手段&#xff0c;能夠減小數據的存儲空間并提高傳輸效率。Windows提供了這些API函數&#xff0c;本文將深入探討使用Windows API進行數據壓縮與解壓縮的過程&#…

【Rust日報】2023-11-21 如何將 Rust 的編譯效率提高 75%

這是一篇來自 https://benw.is/posts/how-i-improved-my-rust-compile-times-by-seventy-five-percent 的總結和翻譯&#xff0c;我去掉了一些不太重要的章節&#xff0c;保留了所有關鍵技術點。 Rust經常被提到的一個痛點是編譯時間較慢。為了享受借用檢查器、安全性和零成本抽…

pikachu靶場Table pikachu.member doesn’t exist:解決

背景&#xff1a; 第一次搭建pikachu靶場&#xff0c;搭建好后訪問index.php后&#xff0c;嘗試練習&#xff0c;發現界面顯示Table pikachu.member doesn t exist&#xff0c;后來找了很多教程&#xff0c;沒有解決&#xff0c;后來發現是自己沒有進行初始化&#xff0c;給大家…

VMware 系列:ESXI6.7升級7.0

ESXI6.7升級7.0 一、下載補丁二、上傳文件三 啟用Shell四、登錄Shell后臺五、刪除不兼容驅動六、正常升級最近,將一臺使用ESXI6.7的虛擬機升級到了7.0版本,下面記錄一下自己的升級過程。 升級條件 首先確保硬件是否能升級到7.0版本,物理網卡驅動為e1000e不能升級,如果是ig…

不到十個例題帶你拿下c++雙指針算法(leetcode)

移動零問題 https://leetcode.cn/problems/move-zeroes/submissions/ 1.題目解析 必須在原數組進行修改&#xff0c;不可以新建一個數組 非零元素相對順序不變 2.算法原理 【數組劃分】【數組分塊】 這一類題會給我們一個數組&#xff0c;讓我們劃分區間&#xff0c;比如…

【機器學習】Nonlinear Independent Component Analysis - Aapo Hyv?rinen

Linear independent component analysis (ICA) x i ( k ) ∑ j 1 n a i j s j ( k ) for all i 1 … n , k 1 … K ( ) x_i(k) \sum_{j1}^{n} a_{ij}s_j(k) \quad \text{for all } i 1 \ldots n, k 1 \ldots K \tag{} xi?(k)j1∑n?aij?sj?(k)for all i1…n,k1…K()…

VUE語法-$refs和ref屬性的使用

1、$refs和ref屬性的使用 1、$refs:一個包含 DOM 元素和組件實例的對象&#xff0c;通過模板引用注冊。 2、ref實際上獲取元素的DOM節點 3、如果需要在Vue中操作DOM我們可以通過ref和$refs這兩個來實現 總結:$refs可以獲取被ref屬性修飾的元素的相關信息。 1.1、$refs和re…

PS_魔幻

首先打開一個背景圖片 然后ctrl j復制一層背景 在調整中將圖片改成黑白顏色 點擊調整中的 色相/飽和度 調整明度 點擊畫筆工具&#xff0c;并且設置畫筆模板 調節畫筆大小&#xff0c;將筆記本電腦涂個概況 然后再新建色相/飽和度 勾選著色 調節背景顏色至喜歡 右鍵混合選項 …

04-React腳手架 集成Axios

初始化React腳手架 前期準備 1.腳手架: 用來幫助程序員快速創建一個基于xxx庫的模板項目 1.包含了所有需要的配置&#xff08;語法檢查、jsx編譯、devServer…&#xff09;2.下載好了所有相關的依賴3.可以直接運行一個簡單效果 2.react提供了一個用于創建react項目的腳手架庫…

【華為OD機試python】分糖果【2023 B卷|100分】

【華為OD機試】-真題 !!點這里!! 【華為OD機試】真題考點分類 !!點這里 !! 題目描述 小明從糖果盒中隨意抓一把糖果,每次小明會取出一半的糖果分給同學們。 當糖果不能平均分配時,小明可以選擇從糖果盒中(假設盒中糖果足夠) 取出一個糖果或放回一個糖果。 小明最少需要多…

【喵叔閑扯】---小談靜態類和單例模式

靜態類&#xff08;Static Class&#xff09;和單例&#xff08;Singleton&#xff09;都是在編程中用于實現特定類型的設計模式或代碼組織方式。它們在不同的情境下有不同的用途和特點。 靜態類&#xff08;Static Class&#xff09; 靜態類是一種類&#xff0c;它的方法和屬性…

一鍵去水印免費網站快速無痕處理圖片、視頻水印

水印問題往往是一個大麻煩。即使我們只想將這些照片保留在我們的個人相冊中以供懷舊&#xff0c;水印也可能像頑固的符號一樣刺激我們的眼睛。為了解決這個問題&#xff0c;我們需要不斷探索創新的解決方案&#xff0c;讓我們深入研究一款強大的一鍵去水印免費網站“水印云”。…

Rust并發編程:理解線程與并發

大家好&#xff01;我是lincyang。 今天我們來深入探討Rust中的并發編程&#xff0c;特別是線程的使用和并發的基本概念。 Rust中的線程 Rust使用線程來實現并發。線程是操作系統可以同時運行的最小指令集。在Rust中&#xff0c;創建線程非常簡單&#xff0c;但與此同時&…

ubuntu 系統 怎么判斷系統有沒有GPU

在 Ubuntu 系統中&#xff0c;您可以通過幾種方式來檢查系統是否包含顯卡&#xff0c;以及顯卡的詳細信息。以下是一些常用的方法&#xff1a; lspci 命令&#xff1a; 打開終端。輸入 lspci | grep VGA 命令。這將顯示系統中所有的 VGA 兼容設備&#xff0c;通常是您的顯卡。 …

二叉搜索樹java實現

顧名思義&#xff0c;二叉搜索樹是一棵二叉樹&#xff0c;每個節點就是一個對象&#xff0c;這個對象包含屬性left、right和parent。left指向節點的左孩子&#xff0c;right指向節點的右孩子&#xff0c;parent指向節點的父節點&#xff08;雙親&#xff09;。如果某個孩子節點…

scala的類介紹

scala的類、抽象類、接口、對象 class :類&#xff0c; 通過new關鍵字來實例化&#xff0c;每次實例化都會創建一個新的對象&#xff1b;用來定義普通的類。object&#xff1a;對象&#xff0c;用來定義一個單例對象的&#xff0c;它只有一個實例&#xff0c;且在程序運行期間…

黑馬點評筆記 redis實現緩存

文章目錄 什么是緩存?為什么要使用緩存 如何使用緩存功能實現緩存模型和思路代碼實現 緩存更新策略數據庫緩存不一致解決方案代碼實現 什么是緩存? 緩存(Cache),就是數據交換的緩沖區,俗稱的緩存就是緩沖區內的數據,一般從數據庫中獲取,存儲于本地代碼(例如: 例1:Static fi…

vr小鼠虛擬解剖實驗教學平臺減少了受感染風險

家畜解剖實驗教學是培養畜牧獸醫專業學生實際操作能力的專業教學活動中的核心手段。采取新型教學方式與手段&#xff0c;合理設置實驗教學內容&#xff0c;有助于激發學生的操作積極性&#xff0c;促進實踐教學的改革。 家畜解剖VR仿真教學是一種借助VR虛擬現實制作和web3d開發…

常用通信接口、協議:SCCB

一、概述 SCCB(串行攝像頭控制總線)是由歐姆尼圖像技術公司&#xff08;OmniVision&#xff09;開發的一種類IIC的總線&#xff0c;主要用于其OV系列的圖像傳感器上&#xff08;但目前有很多家的圖像傳感器都有采用該控制總線&#xff09;。相對于IIC總線來說SCCB與之最主要的差…