Spring 日志文件

Spring 日志文件


文章目錄

  • Spring 日志文件
  • 日志有什么用?
  • 日志怎么用?
  • 自定義日志
    • 在程序中獲取日志對象
    • 常用日志框架說明
    • 使用日志對象打印日志
    • 日志格式說明
  • 日志級別
    • 日志級別有啥用
    • 日志級別分類和使用
    • 日志持久化保存
  • 更簡單的日志輸出——lombok
    • lombok更多注解說明


日志有什么用?

日志是程序的重要組成部分,想象一下,如果程序報錯了,不讓你打開控制臺看日志,那么你能找到報錯的原因嗎?

答案是否定的,寫程序不是買彩票,不能完全靠猜,因此日志對于我們來說,最主要的用途就是排除和定位問題

除了發現和定位問題之外,我們還可以通過日志實現以下功能:

  • 記錄用戶登錄日志,方便分析用戶是正常登錄還是惡意破解用戶
  • 記錄系統的操作日志,方便數據恢復和定位操作人
  • 記錄程序的執行時間,方便為以后優化程序提供數據支持

以上這些都是日志提供的非常實用的功能

日志怎么用?

Spring項目在啟動的時候,默認就有日志輸出:
在這里插入圖片描述
Spring Boot 輸出的控制臺日志信息引發三個問題:

  • Spring Boot 內置日志框架
  • 開發者如何在程序中自定義打印日志
  • 如何將默認打印在控制臺且無法保存的日志永久保存

自定義日志

自定義日志實現步驟:

  1. 在程序中獲取日志對象
  2. 使用日志對象相關語法打印輸出需要內容

在程序中獲取日志對象

在這里插入圖片描述
日志工廠需要將每個類的類型傳遞進去,這樣我們才知道日志的歸屬類,才能更方便、更直觀的定位到問題類

注意:Logger 對象是屬于 org.slf4j 包下的,不要導入錯包

因為 Spring Boot 中內置了日志框架 Slf4j,所以咱們可以直接在程序中調用 slf4j 來輸出日志

常用日志框架說明

在這里插入圖片描述

組合方案優勢適用場景
SLF4J + Logback集成簡單(Spring Boot 默認)、性能優大多數 Spring Boot 項目、中小型應用
SLF4J + Log4j 2高并發下性能極佳、功能最全大型企業級應用、高流量系統
SLF4J + JUL無第三方依賴、輕量極簡 demo 項目、無需復雜日志功能
Commons Logging + Log4j兼容老項目(如 Spring 3.x 及以前)老舊項目維護(不推薦新項目使用)

使用日志對象打印日志

在這里插入圖片描述
控制臺效果如下:
在這里插入圖片描述

日志格式說明

在這里插入圖片描述

日志級別

日志級別有啥用

  • 日志的級別就是為了篩選符合目標的日志信息的。試想一下這樣的場景,假設你是一家2萬人公司的老板,那么每人員工的日常工作和瑣碎的信息都要反饋給你嗎?一定不會,因為你根本沒有那么多精力。于是就有了組織架構,而組織架構就會分級,有很多的級別設置,如下圖所示:
    在這里插入圖片描述

  • 有了組織架構之后,就可以逐級別匯報消息了,例如:組員匯報給組長;組長匯報給研發一組;研發一組匯報給 Java 研發,等等依次進行匯報

  • 而日志分級大概的道理也是一樣的,有了日志級別之后就可以過濾自己想看到的信息了,比如設置日志級別為 error,那么就可以只看程序的報錯日志了,對于普通的調試日志和業務日志就可以忽略了,從而節省開發者的信息篩選時間

日志級別分類和使用

日志的級別分為:

  • trace:微量,少許的意思,級別最低
  • info:普通的打印信息
  • debug:需要調試時候的關鍵信息打印
  • warn:警告,不影響使用,但需要注意的問題
  • error:錯誤信息,級別較高的錯誤日志信息
  • fatal:致命的,因為代碼異常導致程序退出執行的事件

在這里插入圖片描述
注意??:
越往上,收到的信息就越少

日志的使用

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class UserController {// 1. 注入Logger:參數為當前類的Class,便于定位日志歸屬private static final Logger logger = LoggerFactory.getLogger(UserController.class);@GetMapping("/login")public String login(String username, String password) {// 2. 打印不同級別的日志// trace:微量信息(如方法進入/退出,默認不輸出)logger.trace("進入login方法,參數:username={}, password=***", username);// debug:調試信息(如關鍵變量值,開發環境常用)logger.debug("驗證用戶[{}]的密碼長度:{}", username, password.length());// info:業務常規信息(如操作成功,生產環境可輸出核心業務日志)logger.info("用戶[{}]登錄成功,IP地址:192.168.1.100", username);// warn:警告信息(如非致命異常、參數不規范,需關注但不影響流程)if (password.length() < 6) {logger.warn("用戶[{}]使用弱密碼登錄,存在安全風險", username);}// error:錯誤信息(如業務異常、調用失敗,需排查問題)try {// 模擬調用數據庫失敗int result = 1 / 0;} catch (Exception e) {// 打印異常時,需將Exception對象作為最后一個參數傳入(便于輸出堆棧信息)logger.error("用戶[{}]登錄時數據庫操作失敗", username, e);}return "login success";}
}

默認日志輸出級別:

  • 清除掉配置文件中的日志設置,觀察控制臺輸入的日志級別
  • 得到以下結論,日志的輸出級別,默認為 info

日志持久化保存

在 Spring Boot 中,日志持久化是指將原本輸出到控制臺的日志,保存到文件系統中(如磁盤文件),以便后續追溯問題、分析系統運行狀態等。以下是實現日志持久化的核心配置和說明:

核心配置方式(application.ymlapplication.properties
Spring Boot 支持通過簡單的配置,指定日志文件的存儲目錄具體文件名,底層日志框架(如 Logback、Log4j2)會自動將日志寫入對應位置。

  1. 配置日志存儲目錄
    指定日志文件的存儲目錄,Spring Boot 會在該目錄下自動生成默認命名的日志文件(如 spring.log)。

yaml 配置(application.yml):

logging:file:path: D:/logs/spring-boot  # Windows 路徑(注意用 / 或 \\)# 或 Linux/Mac 路徑:/var/logs/spring-boot

properties 配置(application.properties):

logging.file.path=D:/logs/spring-boot
# 或 Linux/Mac:logging.file.path=/var/logs/spring-boot
  1. 配置具體日志文件名
    直接指定日志文件的完整路徑和文件名,日志會精確寫入該文件。

yaml 配置(application.yml):

logging:file:name: D:/logs/spring-boot/my-app.log  # Windows 路徑# 或 Linux/Mac:/var/logs/spring-boot/my-app.log

properties 配置(application.properties):

logging.file.name=D:/logs/spring-boot/my-app.log
# 或 Linux/Mac:logging.file.name=/var/logs/spring-boot/my-app.log

更簡單的日志輸出——lombok

每次都使用 LoggerFactory.getLogger(xxx.class) 很繁瑣,且每個類都添加一遍,也很麻煩,這里講一種更好用的日志輸出方式,使用 lombok 來更簡單的輸出。

  1. 添加 lombok 框架支持。
  2. 使用 @Slf4j 注解輸出日志。
  • 添加 lombok 依賴
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.20</version><optional>true</optional>
</dependency>
  • 輸出日志
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/p")
@Slf4j
public class PersonController {@RequestMapping("/log")public void loggerTest() {log.error("---------------------- error ----------------------");}
}

注意:使用 @Slf4j 注解,在程序中使用 log 對象即可輸入日志,并且只能使用 log 對象才能輸出,這是 lombok 提供的對象名。

lombok更多注解說明

基本注解作用
@Getter自動添加 getter 方法
@Setter自動添加 setter 方法
@ToString自動添加 toString 方法
@EqualsAndHashCode自動添加 equals 和 hashCode 方法
@NoArgsConstructor自動添加無參構造方法
@AllArgsConstructor自動添加全屬性構造方法,順序按照屬性的定義順序
@NonNull屬性不能為 null
@RequiredArgsConstructor自動添加必需屬性的構造方法,final + @NonNull 的屬性為必需
組合注解作用
@Data@Getter + @Setter + @ToString + @EqualsAndHashCode + @RequiredArgsConstructor + @NoArgsConstructor
日志注解作用
@Slf4j添加一個名為 log 的日志,使用 slf4j

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

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

相關文章

五、誤差反向傳播法(上)

上一章中&#xff0c;我們介紹了神經網絡的學習&#xff0c;并通過數值微分計算了神經網絡的權重參數的梯度&#xff08;嚴格來說&#xff0c;是損失函數關于權重參數的梯度&#xff09;。數值微分雖然簡單&#xff0c;也容易實現&#xff0c;但缺點是計算上比較費時間。本章我…

Rust Axum 快速上手指南(靜態網頁和動態網頁2024版)

本文基于 Axum 0.7.5&#xff08;當前穩定版&#xff09;、tower-http 0.5.2、MiniJinja 0.7.2 編寫&#xff0c;涵蓋生產環境核心場景&#xff1a;tower-http Layer 疊加與數據傳遞、靜態網頁服務、MiniJinja 動態模板渲染&#xff0c;并重點解析請求 / 應答在多 Layer 中的流…

Golang語言設計理念

起源 Golang語言始于2007年&#xff0c;是一門編譯型、靜態類型、并發友好 的語言&#xff0c;由Robert Griesemer&#xff08; 羅伯特格里森、圖靈獎獲得者、C 語法聯合發明人、Unix 之父&#xff09;、Rob Pike&#xff08; 羅布派克、Plan 9 操作系統領導者、UTF-8 編碼的最…

深入掌握 nsenter:Linux命名空間操作的利器

#作者&#xff1a;朱雷 文章目錄1、簡介2、功能與用途2.1. 核心功能2.1.1. 進入命名空間2.1.2. 支持多種命名空間2.1.3. 容器調試3、安裝3.1. 依賴包3.2. 權限要求3.3. 命令用法與示例3.3.1. 基本語法3.3.2. 常用選項包括&#xff1a;3.3.3. 示例4、 應用場景與優勢4.1. 容器調…

Ubuntu Qt x64平臺搭建 arm64 編譯套件

環境&#xff1a; 主機平臺&#xff1a;Ubuntu22.04.5 x86_64 目標平臺&#xff1a;IMX8QM Ubuntu22.04.5 arm64 Qt版本&#xff1a;Qt6.5.3 LST GUI實現&#xff1a;QML 一、獲取Ubuntu22.04.5 x86_64 系統鏡像文件 1、鏡像下載與安裝 使用國內鏡像下載對應版本的Ubuntu鏡像…

mysql第五天學習 Mysql全局優化總結

Mysql全局優化總結 從上圖可以看出SQL及索引的優化效果是最好的&#xff0c;而且成本最低&#xff0c;所以工作中我們要在這塊花更多時間。 補充一點配置文件my.ini或my.cnf的全局參數&#xff1a; 假設服務器配置為&#xff1a; CPU&#xff1a;32核內存&#xff1a;64GDISK…

leetcode hot100 二叉搜索樹

二叉搜索樹的第k小的數class Solution:def kthSmallest(self, root: Optional[TreeNode], k: int) -> int:# 二叉搜索樹的中序遍歷是 升序排列的&#xff0c; 求第k小的&#xff0c;即第k個數self.res []def fun(root):if not root:returnfun(root.left)if root:self.res.a…

從Sonnet到Opus:一次解決RAG知識庫流式輸出難題的探索

又到周末&#xff0c;還得消耗消耗 ?? anyrouter 上的Claude資源&#xff0c;萬一哪天都不能用了&#xff0c;也是浪費。 2025/9/5&#xff0c;Claude AI 的母公司 Anthropic 發布了一項新政策&#xff1a;即日起&#xff0c;Anthropic將不再對中國控股公司及其海外子公司開放…

「數據獲取」中國科技統計年鑒(1991-2024)Excel

02、數據詳情數據名稱&#xff1a;《中國科技統計年鑒》&#xff08;1991-2024年&#xff09;數據年份&#xff1a;1991-202403、數據截圖 04、獲取方式&#xff08;獲取方式看綁定的資源&#xff09;

SimLingo:純視覺框架下的自動駕駛視覺 - 語言 - 動作融合模型

摘要 本文深入探討了 SimLingo&#xff0c;一個在自動駕駛領域具有開創性意義的視覺-語言-動作一體化模型。SimLingo 創新性地將自動駕駛、語言理解和指令感知控制整合到一個統一的純攝像頭框架中&#xff0c;顯著提升了自動駕駛系統在復雜環境中的感知、決策與執行能力。該模…

第五十四天(SQL注入數據類型參數格式JSONXML編碼加密符號閉合復盤報告)

#SQL注入產生原理&#xff1a; 代碼中執行的SQL語句存在可控變量導致 #常見SQL注入的利用過程&#xff1a; 1、判斷數據庫類型 2、判斷參數類型及格式 3、判斷數據格式及提交 4、判斷數據回顯及防護 5、獲取數據庫名&#xff0c;表名&#xff0c;列名 5、獲取對應數據及…

VMWare上搭建Hive集群

文章目錄1. MySQL安裝2. 安裝Hive集群3. 使用Hive客戶端4. 實戰總結本實戰在VMware上搭建Hive集群&#xff0c;集成MySQL作為元數據存儲&#xff0c;完成Hive環境配置、元數據初始化及HDFS倉庫目錄創建&#xff0c;實現Hive on Hadoop的SQL查詢能力&#xff0c;為大數據分析提供…

Android網絡之WIFI技術網絡模型概述

文章目錄術語1、WLAN與WIFI2、802.11 WIFI無線網絡標準演進3、WIFI5、WIFI6和WIFI7的最高速率對比4、WIFI網絡中的各個角色&#xff08;元件&#xff09;1&#xff09;網絡拓撲架構圖5、802.11權威指南1&#xff09;OSI與TCP/IP2&#xff09;IEEE 802.11協議簇介紹3&#xff09…

游戲中的設計模式——第三篇 簡單工廠模式

5. 簡單工廠模式 5.1 簡單工廠模式的定義 簡單工廠模式的核心是定義一個創建對象的接口&#xff0c;將對象的創建和本身的業務邏輯分離&#xff0c;降低系統的耦合度&#xff0c;使得兩個修改起來相對容易些&#xff0c;當以后實現改變時&#xff0c;只需要修改工廠類即可。 5.…

基于SVN搭建企業內部知識庫系統實踐

一、準備工作 CentOS 7 服務器&#xff1a;確保你有 root 或 sudo 權限&#xff0c;可以訪問該服務器。Windows 客戶端&#xff1a;你將需要在 Windows 上安裝 TortoiseSVN 客戶端來與 SVN 服務器交互。防火墻&#xff1a;確保你的防火墻已開放 3690 端口&#xff0c;用于 SVN…

SQL注入7----(盲注與回顯)

一.前言 在我們的注入語句被帶入數據庫查詢但卻什么都沒有返回的情況我們該怎么辦&#xff1f;例如應用程序就會返回 一個"通用的"的頁面&#xff0c;或者重定向一個通用頁面&#xff08;可能為網站首頁&#xff09;。這時&#xff0c;我們之前學習的SQL注入辦 法就…

尚硅谷宋紅康JVM全套教程(詳解java虛擬機)

https://www.bilibili.com/opus/1071553679925968898 案例7&#xff1a;日均百萬訂單系統JVM參數設置 https://github.com/wei198621/jvm_by_atguigu https://github.com/xftxyz2001/atguigu-jvm/blob/main/JavaYouthdocsJVM/%E7%AC%AC1%E7%AB%A0-JVM%E4%B8%8EJava%E4%BD%…

鴻蒙NEXT開發實戰:圖片顯示、幾何圖形與自定義繪制詳解

探索HarmonyOS NEXT強大的圖形渲染能力&#xff0c;從圖片展示到自定義繪圖 HarmonyOS NEXT作為華為自主研發的操作系統&#xff0c;為開發者提供了一套豐富而強大的圖形渲染能力。無論是顯示圖片、繪制幾何圖形&#xff0c;還是實現復雜的自定義繪圖&#xff0c;鴻蒙都提供了簡…

python + Flask模塊學習 2 接收用戶請求并返回json數據

用到的模塊還是flask&#xff0c;用到的類有Flask&#xff0c; request&#xff0c; jsonfiy &#x1f642; 目錄 1、GET請求 2、POST請求 1、表單格式 2、json格式 就醬&#xff0c;也比較簡單&#xff0c;下一篇說簡單的授權&#xff0c;簡單來說就是比如用戶付費買了服…

國內外常用的免費BUG管理工具選型

幫助用戶根據自身情況做決定&#xff0c;比如團隊規模、技術能力、是否需要移動端支持等。避免只是羅列工具&#xff0c;而是提供實際選擇的維度。 國內外常用的免費BUG管理工具選擇非常豐富&#xff0c;從輕量級到功能全面型都有覆蓋。我將它們分為幾類&#xff0c;并詳細介紹…