【Spring日志】

一.日志作用

1.定位和發現問題

這是日志的主要用途,通過查看日志,我們可以定位問題發生的位置,從而快速的發現問題,分析問題.

2.系統監控

監控幾乎是一個成熟系統的標配,我們可以通過日志記錄這個系統的運行狀態,比如記錄方法的響應時間,響應狀態,通過設置不同的規則,超過閾值就進行報警.

3.數據采集

采集的數據可以作用在很多方面,比如數據統計,推薦排序.

  • 數據統計:統計頁面的瀏覽量,訪客量,點擊量
  • 推薦排序:購物/廣告/新聞等都設計到推薦排序,數據采集是推薦排序中必須要做的.

4.日志審計

安全審計是系統安全中非常重要的一部分. 通過系統日志分析,可以判斷一些非法攻擊/非法調用.

二.日志的使用

Spring Boot項目在啟動的時候默認就有日志輸出:

這個日志格式是這樣的:

它比我們通過System.out.print打印的日志多了很多信息.

那我們怎么打印自己寫的日志呢?

SpringBoot內置了日志框架Slf4j,我們可以在程序中調用Slf4j來輸出日志.

三.日志框架

Slf4j不同于其他的日志框架,它不是一個真正的日志實現,而是一個對日志框架制定的一種規范,標準,接口. 所以Slf4j并不能獨立使用,需要和具體的日志框架配合使用.


門面模式/外觀模式

門面模式,提供了一個統一的接口,用來訪問子系統中的一組接口,其主要特征是定義了?個?層接?, 讓?系統更容易使?.

Slf4j是門面模式的典型應用

門面模式的優點

1.減少了系統的相互依賴,實現了客戶端和子系統的耦合關系

2.提高了靈活性,簡化了客戶端對子系統的使用難度

3.提高安全性.靈活設方法的定訪問權限

四.SLF4J日志框架

Slf4j就相當于是其他日志框架的門面,可以理解為是提供?志服務的統?API接?

為什么要引入日志門面?

常見的日志框架有 log4j , logback , 一個程序常常需要不同的日志框架, 而不同的日志框架的API和配置文件不同, 如果多個日志框架共存,就要維護多套配置文件,而且如果更換日志框架,還必須修改代碼 , 這個過程很容易產生沖突 .

而如果引入日志門面,應?程序和?志框架(框架的具體實現)之間有了統?的API接?(???志框架 實現), 此時應?程序只需要維護?套?志?件配置, 且當底層實現框架改變時, 也不需要更改應?程序代碼.

Slf4j就是這個日志門面.

所以Slf4j不是一個真實的日志框架實現,是一個日志框架門面?, 具體實現是log4j/log4j/logback/jul?

門面模式只是slf4j使用的一種設計模式 , 還有其他的設計模式.

打印?志的步驟

1. 在程序中得到?志對象.

在程序中獲取?志對象需要使??志?? LoggerFactory

2.使??志對象輸出要打印的內容

?志對象的打印?法有很多種,我們可以先使? info() ?法來輸出?志

日志格式

日志級別

?志級別代表著?志信息對應問題的嚴重性, 為了更快的篩選符合?標的?志信息.

?志的級別從?到低依次為 : FATAL、ERROR、WARN、INFO、DEBUG、TRACE

級別越?, 收到的消息越少

? FATAL: 致命信息,表?需要?即被處理的系統級錯誤.

? ERROR: 錯誤信息, 級別較?的錯誤?志信息, 但仍然不影響系統的繼續運?.

? WARN: 警告信息, 不影響使?, 但需要注意的問題

? INFO: 普通信息, ?于記錄應?程序正常運?時的?些信息, 例如系統啟動完成、請求處理完成等.

? DEBUG: 調試信息, 需要調試時候的關鍵信息打印.

? TRACE: 追蹤信息, ?DEBUG更細粒度的信息事件(除?有特殊?意,否則請使?DEBUG級別替代)

?志級別的使?

?志級別是開發?員??設置的. 開發?員根據??的理解來判斷該信息的重要程度,類似公司管理, 通常由領導來判斷什么樣的事情需要匯報, 什么樣的事情不需要匯報.

針對這些級別, Logger 對象分別提供了對應的?法, 來輸出?志

日志對象名

通常使用源代碼的類名 , 也可以自定義.

這里寫了五種不同級別的日志信息

然而發現只打印了三條日志信息,debug和trace類型的并未打印.

這是由于日志的輸出級別默認是info級別,所以只會打印?于等于此級別的?志, 也就 是info, warn和error.

配置成debug模式后

debug日志可以打印; 但是trace優先級比debug低,不能打印.

日志配置

這里以配置properties文件為例.

1設置日志的級別

logging.level.root: debug

配置根目錄下所有文件日志的級別

logging.level.包路徑 :debug

配置某個包下文件日志的級別

2設置顏色(idea)

?第一步:打開Edit Configuration

第二步:添加這串

  • -Dspring.output.ansi.enabled=ALWAYS

3日志持久化

數據保存在數據庫中,是一種持久化的方式

日志保存在文件中,也是一種持久化的方式

這里是日志保存在文件中,有兩種?式

1. 配置?志?件名

2. 配置?志的存儲?錄

logging.file.name

可以是相對路徑,也可以是絕對路徑. 可以是路徑+文件名/ 單獨一個文件名(以當前目錄作為基準目錄)

logging.file.path

只能是目錄 比如var/log

注意: logging.file.name 和 logging.file.path 兩個都配置的情況下, 只?效其?, 以 logging.file.name 為準.

比如將日志文件保存到aaa.log

4日志分割

修改日志格式

logging.pattern.console

修改控制臺的日志格式

logging.pattern.file

修飾文件的日志格式

日志的簡單寫法

使用注解@Slf4j的方式

配置項

說明

默認值

logging.logback.rollingpolicy.fil e-name-pattern

?志分割后的?件名 格式

${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz

logging.logback.rollingpolicy.m ax-file-size

?志?件超過這個? ?就?動分割

?10MB

???

5配置?志格式

打印?志的格式, 也是?持配置的. ?持控制臺和?志?件分別設置

配置項

說明

默認值

logging.pattern.console

控制臺? 志格式

%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MMdd'T'HH:mm:ss.SSSXXX}}){faint} %clr(${LOG_LEVEL_PATTERN:- %5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]) {faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}

logging.pattern.file

?志?件 的?志格 式

%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MMdd'T'HH:mm:ss.SSSXXX}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}

注意需要簡單配置一下, 讓idea?持控制臺顏?顯?,參考第二點.

更簡單的?志輸出

由于每個類都要使用LoggerFactory獲取日志對象,lombok給我們提供了 ?種更簡單的?式.

1. 添加 lombok 框架?持

2. 使? @slf4j 注解輸出?志。

@slf4j會提供一個日志對象log,直接使用就可以 .

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

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

相關文章

【MyBatis <if> <where>標簽介紹】

文章目錄 <if>標簽<where>標簽<foreach>標簽 <if>標簽 <if>標簽允許我們在SQL語句中添加條件判斷。 <if test"condition"><!-- 當條件滿足時執行的SQL語句 --> </if>其中&#xff0c;test屬性是一個表達式&#x…

葡萄酒按酒體如何分類,都有什么特點?

葡萄酒的酒體是指酒液在口腔中的飽滿度和分量感&#xff0c;品酒者常用“輕盈”“厚重”“適中”等詞匯來形容。所以&#xff0c;云倉酒莊的品牌雷盛紅酒分享在葡萄酒分類中還有一個類型&#xff0c;就是按照酒體進行分類。一般分為輕盈型、中等型、飽滿型。 輕盈型&#xff1…

海外https代理ip如何保障信息安全?該怎么選擇?

海外https代理ip是指通信協議為https的海外真實網絡地址ip&#xff0c;通常應用在各種跨境業務中。 一、什么是HTTPS協議 HTTP協議是一個應用層協議&#xff0c;通常運行在TCP協議之上。它是一個明文協議&#xff0c;客戶端發起請求&#xff0c;服務端給出響應的響應。由于網…

表單郵箱密碼登錄 原生+Jquery實現

文章目錄 效果代碼郵箱驗證正則表達式HTMLCSS JS 效果 正確密碼為&#xff1a;123456 點擊登錄按鈕校驗。 代碼 表單校驗 - CodeSandbox 郵箱驗證正則表達式 /(?:[a-z0-9!#$%&*/?^_{|}~-](?:\.[a-z0-9!#$%&*/?^_{|}~-])*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1…

Excel表中合并兩個Sheet的方法?

按AltF11&#xff0c;調出Visual Basic 界面。 在左側窗口中&#xff0c;右鍵選擇“插入”—“模塊”&#xff1a; 將如下代碼粘貼進去&#xff0c;點擊運行按鈕&#xff0c;完成數據表合并。 Sub MergeAllSheetsInThisWorkbook() On Error Resume Next Application.ScreenU…

JOSEF約瑟 熱過載保護繼電器 JR36-160,整定值100-160A

系列型號 JR36-20 1.0-1.6A熱繼電器 JR36-20 0.25-0.35A熱繼電器 JR36-20 0.32-0.5A熱繼電器 JR36-20 0.45-0.72A熱繼電器 JR36-20 0.68-1.1A熱繼電器 JR36-20 1.5-2.4A熱繼電器 JR36-20 2.2-3.5A熱繼電器 JR36-20 3.2-5A熱繼電器 JR36-20 4.5-7.2A熱繼電器 JR36-20 …

【Python 訓練營】N_1 驗證密碼

N_1 驗證密碼 題目 設計一個用戶密碼驗證程序&#xff0c;要求密碼輸入只有3次機會&#xff0c;且密碼中不能包含”*”字符。 分析 需要考慮3個問題&#xff1a;驗證次數、特殊字符和正誤密碼判斷&#xff1b;驗證次數需要使用循環&#xff0c;3個問題需要用到分支結構&…

客戶案例:保障高校郵件安全,守護教育信息安全堡壘

客戶背景 電子科技大學&#xff08;以下簡稱“電子科大”&#xff09;&#xff0c;位于四川省成都市&#xff0c;是一所歷史悠久、實力雄厚的綜合性工業大學。作為我國重點建設的雙一流高校&#xff0c;電子科大在國內外均享有盛譽&#xff0c;其學科涵蓋了理、工、管、文等多…

7.5 Windows驅動開發:監控Register注冊表回調

在筆者前一篇文章《內核枚舉Registry注冊表回調》中實現了對注冊表的枚舉&#xff0c;本章將實現對注冊表的監控&#xff0c;不同于32位系統在64位系統中&#xff0c;微軟為我們提供了兩個針對注冊表的專用內核監控函數&#xff0c;通過這兩個函數可以在不劫持內核API的前提下實…

數組方法reduce的基礎用法和奇怪的用法

Array.prototype.reduce 是 JavaScript 數組方法之一&#xff0c;用于累積數組的各個值&#xff0c;將其簡化為單個值。下面是一些基礎用法和一些可能被認為奇怪或不太常見的用法&#xff1a; 基礎用法&#xff1a; 數組求和&#xff1a; const numbers [1, 2, 3, 4, 5]; c…

Android runtime層是如何通過縮減代碼來縮減內存的

文章目錄 前言&#xff1a;Android 在設備上改進內存的秘密優化編譯器101代碼大小改進消除寫入障礙隱式暫停檢查合并回調其他優化改進代碼下沉循環優化消除死代碼 – SimplifyAlwaysThrows加載存儲消除 – 使用 try catch 塊加載存儲消除 – 使用釋放/獲取操作新的內聯啟發式不…

遞歸回溯剪枝-子集

LCR 079. 子集 - 力扣&#xff08;LeetCode&#xff09; 方法一 1. 決策樹&#xff1a;對于決策樹&#xff0c;思考的角度不同&#xff0c;畫出的決策樹也會不同&#xff0c;這道題可以從兩個角度來畫決策樹。 2. 考慮全局變量的使用&#xff1a; 使用全局變量 List<List&…

Python 基礎【五】--數據類型-序列【2023.11.24】

1.定義 Python 中的序列是一塊可存放多個值的連續內存空間&#xff0c;所有值按一定順序排列&#xff0c;每個值所在位置都有一個編號&#xff0c;稱其為索引&#xff0c;我們可以通過索引訪問其對應值。 list1 [Google, Runoob, 1997, 2000] list2 [1, 2, 3, 4, 5 ] list3…

馬克思主義基本原理課后題答案

吐血整理馬原word版課后題答案&#xff0c;大家可以自行修改&#xff0c;持續更新中... 【限于篇幅原因&#xff0c;需要的同學可以點贊收藏后&#x1f44d;&#xff0c;掃碼下方的公眾號&#xff0c;回復相應關鍵詞&#xff08;馬原&#xff09;自行領取?~】

【05】ES6:函數的擴展

一、函數參數的默認值 ES6 允許為函數的參數設置默認值&#xff0c;即直接寫在參數定義的后面。 1、基本用法 默認值的生效條件 不傳參數&#xff0c;或者明確的傳遞 undefined 作為參數&#xff0c;只有這兩種情況下&#xff0c;默認值才會生效。 注意&#xff1a;null 就…

react的開發中關于圖片的知識

React是一個流行的JavaScript庫&#xff0c;用于構建用戶界面。在React開發中&#xff0c;圖片是一個非常重要的元素&#xff0c;可以用于美化界面和展示內容。本篇博客將詳細講解React中關于圖片的知識。 1. React中使用圖片 在React中使用圖片非常簡單&#xff0c;只需要使…

【Web題】狼追兔問題

&#x1f49d;&#x1f49d;&#x1f49d;歡迎來到我的博客&#xff0c;很高興能夠在這里和您見面&#xff01;希望您在這里可以感受到一份輕松愉快的氛圍&#xff0c;不僅可以獲得有趣的內容和知識&#xff0c;也可以暢所欲言、分享您的想法和見解。 推薦:kwan 的首頁,持續學…

解決Resolving Android Dependencies問題

無論是谷歌的Admob&#xff0c;還是Unity的Level play&#xff0c; 在windows&#xff08;win10, win11&#xff09;下&#xff0c;都出現了resolving android dependencies 報錯并且卡住的問題&#xff0c;如圖: 主要錯誤&#xff0c;是找不到這個gradlew.bat文件。 在指定位置…

什么是單元測試?

什么是單元測試 單元測試是軟件開發中的一種測試方法&#xff0c;旨在驗證各個軟件組件或模塊的功能正確性。在敏捷開發環境中&#xff0c;單元測試尤為重要&#xff0c;因為它有助于確保代碼的質量和穩定性。下面是一些關于單元測試的關鍵點&#xff1a; 定義&#xff1a;單元…

力扣每日一題-統計和小于目標的下標對數目-2023.11.24

力扣每日一題&#xff1a;統計和小于目標的下標對數目 開篇 今天這道力扣打卡題寫得我好狼狽&#xff0c;一開始思路有點問題&#xff0c;后面就是對自己的代碼到處縫縫補補&#xff0c;最后蒙混過關。只能分享一下大佬的代碼&#xff0c;然后我幫大家分享代碼的思路。 題目鏈…