private static final Logger log = LoggerFactory.getLogger()和@Slf4j的區別

一、代碼方面

- private static final Logger log = LoggerFactory.getLogger()方式

  • 詳細解釋
    • 這是一種傳統的獲取日志記錄器(Logger)的方式。LoggerFactory是日志框架(如 Log4j、Logback 等)提供的工廠類,用于創建Logger對象。在這里,通過調用LoggerFactory.getLogger()方法來獲取一個Logger實例。private static final修飾符表示log是一個私有、靜態、不可變的變量。靜態變量意味著它屬于類級別,在類加載時初始化,并且在整個類的生命周期內只有一個實例。私有訪問修飾符限制了對該變量的訪問只能在當前類內部進行。這種方式可以精確地控制日志記錄器的創建和配置。
  • 示例
    • 假設使用的是 Logback 作為日志框架,在一個 Java 類中:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MyClass {private static final Logger log = LoggerFactory.getLogger(MyClass.class);public void doSomething() {log.info("開始執行doSomething方法");// 業務邏輯代碼log.info("doSomething方法執行完畢");}
}

在這個例子中,log是MyClass類的日志記錄器。在doSomething方法中,通過log.info()方法記錄了方法開始和結束的信息。

  • 缺點
    比較繁瑣。每次需要在類中手動聲明Logger對象,并且如果在一個項目中有大量的類需要記錄日志,這種重復的代碼會使代碼看起來不夠簡潔。

- @Slf4j注解方式

  • 詳細解釋
    • @Slf4j是 Lombok 庫提供的一個注解。Lombok 是一個 Java 庫,它通過注解的方式在編譯階段自動生成一些常用的代碼,比如getter、setter方法,構造函數等。當在一個類上添加@Slf4j注解時,Lombok 會在編譯時自動為這個類生成一個名為log的Logger對象,這個對象的類型和獲取方式與使用private static final Logger log = LoggerFactory.getLogger();類似,但不需要手動編寫這行代碼。這樣可以大大減少代碼的冗余,使代碼更加簡潔。
  • 示例
    首先需要在項目中引入 Lombok 依賴。如果是 Maven 項目,在pom.xml文件中添加以下依賴:
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.28</version><scope>provided</scope>
</dependency>

然后在 Java 類中使用@Slf4j注解:

import lombok.extern.slf4j.Slf4j;
@Slf4j
public class AnotherClass {public void doAnotherThing() {log.info("開始執行doAnotherThing方法");// 業務邏輯代碼log.info("doAnotherThing方法執行完畢");}
}

這里可以看到,沒有手動聲明Logger對象,但是通過@Slf4j注解,同樣可以使用log對象來記錄日志。

  • 優點
    簡潔性。通過使用注解,減少了手動聲明日志記錄器的代碼,使代碼更加緊湊,特別是在有大量類需要記錄日志的情況下,能夠顯著提高代碼的可讀性和可維護性。

二、編譯階段的差異

  • private static final Logger log = LoggerFactory.getLogger()

    • 這是 Java 原生的代碼方式,編譯器會按照常規的代碼編譯流程進行處理。在運行時,Logger對象會按照代碼的初始化順序在類加載時被創建。
  • @Slf4j

    • 在編譯階段,Lombok 的注解處理器會介入。它會分析帶有@Slf4j注解的類,然后根據類的信息自動生成獲取Logger對象的代碼。這個過程對于開發者是透明的,但實際上是在編譯時對代碼進行了修改和擴展。例如,它會生成類似于private static final Logger log = LoggerFactory.getLogger(MySlf4jLoggerClass.class);這樣的代碼。

三、靈活性與兼容性方面

  • private static final Logger log = LoggerFactory.getLogger()
    • 這種方式更加靈活。因為是手動編寫獲取Logger對象的代碼,開發者可以根據具體的需求進行定制。例如,可以通過不同的參數來獲取不同配置的Logger對象,或者在一些特殊的環境下(如不能使用 Lombok 的情況),依然能夠正常獲取和使用Logger對象。
  • @Slf4j
    • 依賴于 Lombok 庫。如果項目沒有引入 Lombok 或者 Lombok 版本不兼容等情況,使用@Slf4j就會出現問題。不過,在大多數支持 Lombok 的現代 Java 開發環境中,它能很好地工作,并且提供了便捷的日志記錄方式。但是在一些嚴格的開發環境或者對外部庫有限制的場景下,其使用可能會受到限制。

小結

@Slf4j注解提供了一種更簡潔的方式來獲取日志記錄器,而傳統的private static final Logger log = LoggerFactory.getLogger()方式則更加靈活,在某些復雜的日志配置場景或者無法使用 Lombok 的情況下仍然是一種有效的方式。

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

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

相關文章

醫療數倉Hive安裝部署

Hive安裝部署 Hive安裝部署 1&#xff09;把hive-3.1.3.tar.gz上傳到linux的/opt/software目錄下 2&#xff09;解壓hive-3.1.3.tar.gz到/opt/module/目錄下面 [atguiguhadoop102 software]$ tar -zxvf /opt/software/hive-3.1.3.tar.gz -C /opt/module/3&#xff09;修改hive…

通俗易懂的講一下Vue的雙向綁定和React的單向綁定

1.Vue 的雙向綁定&#xff1a; <template><!-- 輸入框和數據自動綁定&#xff0c;就像連體嬰兒&#xff0c;一個動另一個也動 --><input v-model"message"><p>{{ message }}</p><!-- 完整表單示例 --><form><!-- 所有…

使用setup.py打包 HuggingFace PEFT 項目詳解:pip install peft的幕后流程

使用 setup.py 打包 HuggingFace PEFT 項目詳解 Source: https://github.com/huggingface/peft/blob/main/setup.py 1. 項目簡介 HuggingFace 的 PEFT&#xff08;Parameter-Efficient Fine-Tuning&#xff09;庫是一個用于高效參數微調的 Python 工具包&#xff0c;支持多種…

BP神經網絡的反向傳播算法

BP神經網絡&#xff08;Backpropagation Neural Network&#xff09;是一種常用的多層前饋神經網絡&#xff0c;通過反向傳播算法進行訓練。反向傳播算法的核心思想是通過計算損失函數對每個權重的偏導數&#xff0c;從而調整權重&#xff0c;使得網絡的預測輸出與真實輸出之間…

線程池的創建規范

第1章&#xff1a;引言——為什么使用線程池&#xff1f; 1.1 線程池的概念 線程池是一個容器&#xff0c;用來管理多個工作線程&#xff0c;它通過對線程的管理、復用來提高系統性能。線程池的核心理念是將線程的創建、銷毀、復用等操作交給線程池來管理&#xff0c;避免了頻…

【藍橋杯比賽-C++組-經典題目匯總】

1. 最短路 題目描述&#xff1a; 如下圖所示&#xff0c;G是一個無向圖&#xff0c;其中藍色邊的長度是1、橘色邊的長度是2、綠色邊的長度是3。 則從 A 到 S 的最短距離是多少&#xff1f; #include <iostream> #include <cstring> using namespace std; const i…

活動預告 | Microsoft 安全在線技術公開課:通過擴展檢測和響應抵御威脅

課程介紹 通過 Microsoft Learn 免費參加 Microsoft 安全在線技術公開課&#xff0c;掌握創造新機遇所需的技能&#xff0c;加快對 Microsoft Cloud 技術的了解。參加我們舉辦的“通過擴展檢測和響應抵御威脅”技術公開課活動&#xff0c;了解如何更好地在 Microsoft 365 Defen…

第八節:GLM-4v-9b模型的大語言模型源碼解讀(ChatGLMForConditionalGeneration)

文章目錄 前言一、ChatGLMForConditionalGeneration類源碼解讀1、ChatGLMForConditionalGeneration類源碼2、self.transformer方法源碼3、loss_fct = CrossEntropyLoss(ignore_index=-100)方法Demo二、ChatGLMModel類源碼解讀三、GLMTransformer結構源碼解讀四、GLMBlock結構源…

Windows onnxruntime編譯openvino

理論上來說&#xff0c;可以直接訪問 ONNXRuntime Releases 下載 dll 文件&#xff0c;然后從官方文檔中下載缺少的頭文件以直接調用&#xff0c;但我沒有嘗試過。 1. 下載 OpenVINO 包 從官網下載 OpenVINO 的安裝包并放置在 C:\Program Files (x86) 路徑下&#xff0c;例如…

Vue3 中的插槽

Vue3 中插槽的使用&#xff0c;插槽是 Vue 中的一個特別特性&#xff0c;插槽就是模版內容。例如<h1>標題 1</h1>標題 1 就是插槽&#xff0c;Vue 是無法識別模板內容的&#xff0c;只能通過屬性進行傳遞。Slot 主要包括默認、具名和作用域。Slot開發起來難度不大&…

01.02周四F34-Day43打卡

文章目錄 1. 地是濕的。昨晚估計下雨了。2. 你可能把包丟在餐廳里了吧?3. 她說他可能誤了航班。4. 我本來應該早點來的,但路上特別堵。5. 約翰可能在那次事故中受了重傷。6. 這是一個情景對話7. 我本可以走另一條路的。8. 我準是瘦了不少,你看我這褲子現在多肥。9. 錢沒了!會…

深度學習:基于MindSpore NLP的數據并行訓練

什么是數據并行&#xff1f; 數據并行&#xff08;Data Parallelism, DP&#xff09;的核心思想是將大規模的數據集分割成若干個較小的數據子集&#xff0c;并將這些子集分配到不同的 NPU 計算節點上&#xff0c;每個節點運行相同的模型副本&#xff0c;但處理不同的數據子集。…

五類推理(邏輯推理、概率推理、圖推理、基于深度學習的推理)的開源庫 (一)

在開發中&#xff0c;有一些開源庫可以實現不同類型的推理&#xff0c;包括邏輯推理、概率推理、圖推理、基于深度學習的推理等。以下是五類推理&#xff08;邏輯推理、概率推理、圖推理、基于深度學習的推理&#xff09;的現成開源庫&#xff0c;它們各自的功能、特點和適用場…

高等數學學習筆記 ? 函數的極限

1. 函數的極限定義 備注&#xff1a;已知坐標軸上一點&#xff0c;則&#xff1a; ①&#xff1a;的鄰域&#xff1a;指附近的開區間&#xff0c;記作。 ②&#xff1a;的去心鄰域&#xff1a;指附近的開區間&#xff0c;但不包含&#xff0c;記作。 ③&#xff1a;的鄰域&…

Python用K-Means均值聚類、LRFMC模型對航空公司客戶數據價值可視化分析指標應用|數據分享...

全文鏈接&#xff1a;https://tecdat.cn/?p38708 分析師&#xff1a;Yuling Fang 信息時代的來臨使得企業營銷焦點從產品中心轉向客戶中心&#xff0c;客戶關系管理成為企業的核心問題&#xff08;點擊文末“閱讀原文”獲取完整代碼數據&#xff09;。 客戶關系管理的關鍵是客…

【前端系列】優化axios響應攔截器

文章目錄 一、前言&#x1f680;&#x1f680;&#x1f680;二、axios響應攔截器&#xff1a;??????2.1 為什么前端需要響應攔截器element ui的消息組件 一、前言&#x1f680;&#x1f680;&#x1f680; ?? 回報不在行動之后&#xff0c;回報在行動之中。 這個系列可…

【 IEEE 獨立出版 · EI核心、Scopus穩定檢索 】第二屆算法、軟件工程與網絡安全國際學術會議(ASENS 2025)

ASENS 2025 第二屆算法、軟件工程與網絡安全國際學術會議 2025 2nd International Conference on Algorithms, Software Engineering and Network Security 中國 廣州 2025年3月21-23日 會議官網&#xff1a;www.ic-asens.org IEEE 獨立出版 EI核心、Scopus快速…

/ete/security/limits.conf參數詳解

/ete/security/limits.conf配置文件 內容如下&#xff1a; * soft nofile 65535 * hard nofile 65535參數詳解 *: 表示對所有用戶生效soft: 表示軟限制&#xff0c;即用戶可以通過ulimit命令自行調整該值hard: 表示硬限制&#xff0c;即用戶無法通過ulimit命令將該值調整超過…

#Vue3篇: 無感刷新token的原理JSESSIONID無感刷新和JWT接口刷新

基于這個后端是怎么更新token的 為了理解后端是如何更新 Token 的&#xff0c;我們需要考慮一個典型的基于 Token 的身份驗證流程&#xff0c;特別是涉及 JSESSIONID 和自定義 Token&#xff08;如 JWT, JSON Web Token&#xff09;的情況。 下面我將介紹兩種常見的更新 Token …

模塊化通訊管理機在物聯網系統中的應用

安科瑞劉鴻鵬 摘要 隨著能源結構轉型和智能化電網的推進&#xff0c;電力物聯網逐漸成為智能電網的重要組成部分。本文以安科瑞ANet系列智能通信管理機為例&#xff0c;探討其在電力物聯網中的應用&#xff0c;包括數據采集、規約轉換、邊緣計算、遠程控制等技術實踐&#…