【JavaEE】Spring Boot 日志

目錄

  • 一、日志概述
  • 二、使用日志
    • 2.1 打印日志
    • 2.2 日志框架
      • 2.2.1 門面 / 外觀 模式
    • 2.3 日志級別
      • 2.3.1 六大分類
      • 2.3.2 使用
    • 2.4 日志級別配置
    • 2.5 日志的持久化
    • 2.6 日志文件分割
    • 2.7 日志文件格式
    • 2.8 @Slf4j 簡單打印日志

一、日志概述

?志主要是為了發現問題, 分析問題, 定位問題的, 但除此之外, ?志還有很多?途,像監控程序,當程序出現什么問題時,在日志中反應為相對應的日志,然后可以提醒程序猿。日志還可以記錄數據,用于分析等等。

二、使用日志

我們先簡單看一下一個Spring的日志包含的內容:

2.1 打印日志

我們在程序中打印SpringBoot的日志,我們先要拿到日志對象,在import org.slf4j包下的Logger對象。在從這個包下的靜態類日志工廠 LoggerFactor拿到實例 。

 private Logger  logger = LoggerFactory.getLogger(LogController.class);

在通過Logger類中的info方法打印日志。

package com.example.captcha.Controller;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RequestMapping("/log")
@RestController
public class LogController {private final static Logger  LOGGER = LoggerFactory.getLogger(LogController.class);@RequestMapping("/print")public String print() {LOGGER.info("日志");return "日志";}
}

得到的日志:

2.2 日志框架

在我們使用Logger類的時候,會有很多包。

這幾個包的關系如下:

以電視機和遙控器來舉例子,日志實現就相當于不同品牌的電視,而日志門面就相當于一個 通用的遙控器。

2.2.1 門面 / 外觀 模式

門面模式:
??模式(Facade Pattern)?稱為外觀模式, 提供了?個統?的接?, ?來訪問?系統中的?群接口. 其主要特征是定義了?個?層接?, 讓?系統更容易使?.

??模式主要包含2種??:
外觀??(Facade): 也稱????,系統對外的統?接?.

?系統??(SubSystem): 可以同時有?個或多個 SubSystem. 每個 SubSytem都不是?個單獨的類, ?是?個類的集合. SubSystem 并不知道 Facade的存在, 對于 SubSystem ??, Facade 只是另?個客?端?已(即 Facade 對 SubSystem 透明)

2.3 日志級別

2.3.1 六大分類

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

  • FATAL: 致命信息,表?需要?即被處理的系統級錯誤.
  • ERROR: 錯誤信息, 級別較?的錯誤?志信息, 但仍然不影響系統的繼續運?.
  • WARN: 警告信息, 不影響使?, 但需要注意的問題
  • INFO: 普通信息, ?于記錄應?程序正常運?時的?些信息,例如系統啟動完成、請求處理完成等.
  • DEBUG: 調試信息, 需要調試時候的關鍵信息打印.
  • TRACE: 追蹤信息, ?DEBUG更細粒度的信息事件(除?有特殊?意,否則請使?DEBUG級別替代)

2.3.2 使用

對于不同級別的日志,SpringBoot的Logger類下面有對應名字的方法(FATAl)除外。

SpringBoot 默認的?志框架是Logback, Logback沒有 FATAL 級別, 它被映射到 ERROR .出現fatal?志,表?服務已經出現了某種程度的不可?, 需要需要系統管理員緊急介?處理. 通常情況下, ?個進程?命周期中應該最多只有?次FATAL記錄.

package com.example.captcha.Controller;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RequestMapping("/log")
@RestController
public class LogController {private final static Logger  LOGGER = LoggerFactory.getLogger(LogController.class);@RequestMapping("/print")public String print() {//LOGGER.info("日志");LOGGER.trace("trace級別日志");LOGGER.debug("debug級別日志");LOGGER.info("info級別日志");LOGGER.warn("ware級別日志");LOGGER.error("error級別日志");return "日志";}
}

上訴代碼的結果如下:

只會顯示info級別及其以上級別的日志,這是因為Spring在默認的配置下是顯示info級以上級別日志。

2.4 日志級別配置

我們只需要在配置文件加上:logging.level.目錄就可以配置相對應目錄下的日志顯示級別。

如果我們在配置文件中加上這樣的配置信息

logging:level:com:example:captcha:Controller: trace

那么我們打印的日志就會變成下面的這樣:

2.5 日志的持久化

日志如果不進行配置,默認?志都是輸出在控制臺上的, 然?在線上環境中, 我們需要把?志保存下來, 以便出現問題之后追溯問題.把?志保存下來就叫持久化。
我們就可以將日志寫入文件。
Spring中有以下兩個配置項,來配置日志寫入的文件。

  • logging.file.name配置項,可以包含文件的路徑和文件名。
  • logging.file.path配置項,只能包含文件路徑。
  • 當兩個配置項同時存在的時候,只有logging.file.name會有作用。

我們進行如下配置:

logging:file:name: logger/log.logpath: all

得到如下結果:

2.6 日志文件分割

日志文件分割有以下兩個相關的配置項:

  • logging.logback. rolling policy.max-file-size配置項,用于配置每個文件的大小。
  • logging.logback. rolling policy.file-name-pattern配置項,用于配置每個文件的名字及其格式。

我們寫下如下配置:

logging:logback:rolling policy:max-file-size: 1KBfile-name-pattern: ${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz

結果就如下:

注意事項:

  • logging.logback. rolling policy.max-file-size配置項,并不是嚴格的每個文件都不會超過配置的大小,而是按照必須將當前的日志行寫完才分割。
  • logging.logback. rolling policy.file-name-pattern配置項,默認格式${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz

2.7 日志文件格式

日志文件格式分割有以下兩個相關的配置項:

配置項說明
logging.pattern.console控制臺?志格式
logging.pattern.file?志?件的?志格式

配置項說明:

  1. %clr(表達式){顏?}設置輸??志的顏?。支持blue cyan faint green magenta red yellow
  2. %d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd’T’HH:mm:ss.SSSXXX}} ?期和時間–精確到毫秒
  3. %5p 顯??志級別ERROR,MARN,INFO,DEBUG,TRACE.
  4. %t 線程名.
  5. %c 類的全限定名.
  6. %M method.
  7. %L 為?號.
  8. %thread 線程名稱.
  9. %m 或者%msg 顯?輸出消息.
  10. %n 換?符
  11. %5 若字符?度?于5,則右邊?空格填充.
  12. %-5 若字符?度?于5,則左邊?空格填充.
  13. %.15 若字符?度超過15,截去多余字符.
  14. %15.15 若字符?度?于15,則右邊?空格填充.若字符?度超過15,截去多余字符

2.8 @Slf4j 簡單打印日志

我們可以使用lombok提供的@Slf4j注解來打印日志,這個注解的作用相當于就是sping幫我們創建Logger對象,對象名為log。

例如下面代碼:

package com.example.captcha.Controller;import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RequestMapping("/log")
@RestController
@Slf4j
public class LogController {@RequestMapping("/print")public String print() {//LOGGER.info("日志");log.trace("trace級別日志");log.debug("debug級別日志");log.info("info級別日志");log.warn("ware級別日志");log.error("error級別日志");return "日志";}
}

結果如下:

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

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

相關文章

代碼隨想錄算法訓練營第34天 | 62.不同路徑 63. 不同路徑 II 整數拆分 不同的二叉搜索樹 (跳過)

62.不同路徑 62. 不同路徑 - 力扣(LeetCode) 本題大家掌握動態規劃的方法就可以。 數論方法 有點非主流,很難想到。 代碼隨想錄 視頻講解:動態規劃中如何初始化很重要!| LeetCode:62.不同路徑_嗶哩嗶哩_b…

uniapp APP權限彈框

效果圖 第一步 新建一個頁面,設置透明 {"path": "pages/permissionDisc/permissionDisc","style": {"navigationBarTitleText": "","navigationStyle": "custom","app-plus": {&…

網絡安全證書培訓機構有哪些

一、前言少敘 記得剛入行的時候,想考一個證書來裝裝門面,結果發現費用太高了,比當時一個月的工資都高,感嘆網絡安全這幫人真舍得花錢,遂放棄。后來入職網絡安全公司,考了一個CISP,在工作中逐漸…

torch.argsorttorch.gather

文章目錄 1. 舉例說明2. pytorch 代碼 1. 舉例說明 torch.argsort 的作用是可以將矩陣中的元素進行從小到大排序,得到對應的序號。假設我們有一個向量a表示如下 a [ 8 , 7 , 6 , 9 , 7 ] \begin{equation} a[8,7,6,9,7] \end{equation} a[8,7,6,9,7]?? 那么從小…

JSON數據格式介紹

2.5 JSON 2.5.1.JSON格式的用途 在開發中凡是涉及到『跨平臺數據傳輸』,JSON格式一定是首選 2.5.2.JSON格式的說明 1.JSON數據兩端要么是{},要么是[] {}定義JSON對象[]定義JSON數組 2.JSON對象的格式是:json {key:value,key:value,...,ke…

(性能測試)性能測試工具 2.jmeter的環境搭建 3jmeter元件和4使用實例 5jmeter元件和參數化

目錄 性能測試工具 性能測試工具 jemeter環境搭建 jmeter的常用目錄介紹 jmeter修改語言和主題--jmeter界面的漢化 jmeter元件 jmeter元件和組件的介紹 jmeter的作用域原則 jmeter的執行順序 案例:執行順序 jmeter使用案例 jmeter線程組的介紹 jmeter…

Qt程序基于共享內存讀寫CodeSys的變量

文章目錄 1.背景2.結構體從CodeSys導出后導入到C2.1.將結構體從CodeSys中導出2.2.將結構體從m4文件提取翻譯成c格式 3.添加RTTR注冊信息4.讀取PLC變量值5.更改PLC變量值6.Qt讀寫CodeSys的共享內存 1.背景 在文章【基于RTTR在C中實現結構體數據的多層級動態讀寫】中&#xff0c…

大模型架構全景解析:從Transformer到未來計算范式

1. Transformer 架構 核心模型 GPT-4、BERT、T5、LLaMA、通義千問、文心ERNIE 關鍵技術 多頭注意力:GPT-4 使用 96 頭注意力位置編碼創新:LLaMA 采用 RoPE(旋轉位置編碼),Claude 3 引入 ALiBi歸一化優化&#xff1…

AI第一天 自我理解筆記--微調大模型

目錄 1. 確定目標:明確任務和數據 2. 選擇預訓練模型 3. 數據預處理 (1) 數據清洗與格式化 (2) 劃分數據集 (3) 數據加載與批處理 4. 構建微調模型架構 (1) 加載預訓練模型 (2) 修改模型尾部(適配任務) (3) 凍結部分層(可…

計算機視覺——深入理解卷積神經網絡與使用卷積神經網絡創建圖像分類算法

引言 卷積神經網絡(Convolutional Neural Networks,簡稱 CNNs)是一種深度學習架構,專門用于處理具有網格結構的數據,如圖像、視頻等。它們在計算機視覺領域取得了巨大成功,成為圖像分類、目標檢測、圖像分…

[C++面試] 關于deque

一、入門 1、deque與vector的區別 deque的迭代器包含以下信息: 當前緩沖區指針(current_buffer)當前元素在緩沖區內的位置(current)中控器的位置(map) 每次移動迭代器時,需檢查是…

服務性能防腐體系:基于自動化壓測的熔斷機制

01# 背景 在系統架構的演進過程中,項目初始階段都會通過壓力測試構建安全護城河,此時的服務性能與資源水位保持著黃金比例關系。然而在業務高速發展時期,每個沖刺周期都被切割成以業務需求為單位的開發單元,壓力測試逐漸從必選項…

SpringBoot 和vue前后端配合開發網頁拼圖10關游戲源碼技術分享

今天分享一個 前后端結合 的網頁游戲 開發項目源碼技術。 這也是我第一次寫游戲類的程序,雖然不是特別復雜的游戲,但是是第一次寫,肯定要記錄一下了,哈哈。 游戲的內容 就是 我們顯示中玩的那個 拼圖碎片的 游戲,類似下…

【k8s002】k8s健康檢查與故障診斷

k8s健康檢查與故障診斷 ?一、集群狀態檢查? ?檢查節點健康狀態? kubectl get nodes -o wide # 查看節點狀態及基本信息 kubectl describe node <node-name> # 分析節點詳細事件&#xff08;如資源不足、網絡異常&#xff09; kubectl top nodes …

01-Canvas-使用fabric初始

fabric官網&#xff1a; https://fabric5.fabricjs.com/demos/ 創建畫布并繪制 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-sca…

【機器學習-基礎知識】統計和貝葉斯推斷

1. 概率論基本概念回顧 1. 概率分布 定義: 概率分布(Probability Distribution)指的是隨機變量所有可能取值及其對應概率的集合。它描述了一個隨機變量可能取的所有值以及每個值被取到的概率。 對于離散型隨機變量,使用概率質量函數來描述。對于連續型隨機變量,使用概率…

常見限流算法及實現

1. 固定窗口計數器&#xff08;Fixed Window Counter&#xff09; 原理&#xff1a;在固定時間窗口&#xff08;如1分鐘&#xff09;內統計請求數&#xff0c;超過閾值則拒絕后續請求。優點&#xff1a;實現簡單&#xff0c;內存占用低。缺點&#xff1a;存在窗口切換時的流量…

《TCP/IP網絡編程》學習筆記 | Chapter 18:多線程服務器端的實現

《TCP/IP網絡編程》學習筆記 | Chapter 18&#xff1a;多線程服務器端的實現 《TCP/IP網絡編程》學習筆記 | Chapter 18&#xff1a;多線程服務器端的實現線程的概念引入線程的背景線程與進程的區別 線程創建與運行pthread_createpthread_join可在臨界區內調用的函數工作&#…

創新實踐分享:基于邊緣智能+扣子的智能取物機器人解決方案

在 2024 年全國大學生物聯網設計競賽中&#xff0c;火山引擎作為支持企業&#xff0c;不僅參與了賽道的命題設計&#xff0c;還為參賽隊伍提供了相關的硬件和軟件支持。以邊緣智能和扣子的聯合應用為核心&#xff0c;參賽者們在這場競賽中展現出了卓越的創新性和實用性&#xf…

QT:動態屬性和對象樹

動態對象 1.添加Q_PROPERTY對象 #ifndef MYPROPERTYCLASS_H #define MYPROPERTYCLASS_H#include <QObject>class MyPropertyClass : public QObject {Q_OBJECTQ_PROPERTY(QString mask READ mask WRITE setMask NOTIFY maskChanged) public:explicit MyPropertyClass(Q…