日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ref:下一个项目为什么要用 SLF4J

發布時間:2023/12/9 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ref:下一个项目为什么要用 SLF4J 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

ref:http://blog.mayongfa.cn/267.html

阿里巴巴 Java 開發手冊

前幾天阿里巴巴在云棲社區首次公開阿里官方Java代碼規范標準,就是一個PDF手冊,有命名規范,讓你知道自己原來取的每一個類名、變量名都是爛名字,真替你家未來孩子擔心;有集合處理、并發處理、OOM/NPE 異常、魔法值等等好多規范,什么?你不知道什么是魔法值,算了,我也是第一次聽說:即未經定義的常量;還有一個關于?Map 遍歷的推薦,這個大家應該都知道,推薦使用 entrySet 遍歷 Map 類集合 KV,而不是 keySet 方式進行遍歷。 因為 keySet 是遍歷了 2 次,而 entrySet 只是遍歷了一次就把 key 和 value 都放到了 entry 中,效率更高。還有接口類中的方法和屬性不要加任何修飾符號(public 也不要加)這些推薦做法,這些都沒什么,日常開發中應該做到的規范,但下面這個【強制】,我發現我接觸的項目都沒做到。

【強制】應用中不可直接使用日志系統(Log4j、Logback)中的 API

在手冊中的日志規約中,看到有一條這樣的規定,說實話我有點懵逼, Log4j 不是 Java 中應用最廣的日志系統么?為啥不讓用?

【強制】應用中不可直接使用日志系統(Log4j、Logback)中的API,而應依賴使用日志框架SLF4J中的API,使用門面模式的日志框架,有利于維護和各個類的日志處理方式統一。
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private static final Logger logger = LoggerFactory.getLogger(Abc.class);

在這段規約中看到了推薦使用?SLF4J?這個日志框架,而且還是毫不由分說的【強制】,那它到底好在什么地方?

SLF4J,即簡單日志門面(Simple Logging Facade for Java),不是具體的日志解決方案,它只服務于各種各樣的日志系統。按照官方的說法,SLF4J是一個用于日志系統的簡單Facade,允許最終用戶在部署其應用時使用其所希望的日志系統。來自百科里的描述

大概意思就是說 SLF4J 是一個日志抽象層,允許你使用任何一個日志系統,并且可以隨時切換還不需要動到已經寫好的程序(我特么是真改過整個項目的所有打印日志的代碼,累死...),這對于第三方組件的引入的不同日志系統來說幾乎零學習成本了,況且它的優點不僅僅這一個而已,還有簡潔的占位符的使用和日志級別的判斷,眾所周知的日志讀寫一定會影響系統的性能,但這些特性都是對系統性能友好的。官網地址:https://www.slf4j.org/

少廢話,你來測試一下

說了辣么多,下面我就將建立一個項目,是 Maven 項目哦,并用 SLF4J 來結合?JDK14、Simple、Logback、Log4j做日志系統,在上述幾個日志系統間隨意切換,而且不修改一行代碼,甚至不用修改一個字符。

1.首先建立一個簡單的 Java 項目(Maven Project),目錄結構如下:

2.在 pom.xml 中增加 SLF4J API 依賴包
使用的目前最新穩定版 1.7.22 的 SLF4J:

  • <dependency>
  • <groupId>org.slf4j</groupId>
  • <artifactId>slf4j-api</artifactId>
  • <version>1.7.22</version>
  • </dependency>
  • jar 包:?slf4j-api-1.7.22.jar
    接著并在測試項目中的?App.java?中加入日志輸出代碼,代碼如下:

  • package xyz.mafly.SLF4JTest;
  • import org.slf4j.Logger;
  • import org.slf4j.LoggerFactory;
  • /**
  • * Hello world!
  • *
  • */
  • public class App {
  • final Logger logger = LoggerFactory.getLogger(App.class);
  • private void test() {
  • logger.info("這是一條日志信息 - {}", "mafly");
  • }
  • public static void main(String[] args) {
  • App app = new App();
  • app.test();
  • System.out.println("Hello World!");
  • }
  • }
  • 到這里,代碼就寫完了、寫完了。以后無論在 Log4j 還是 Logback 日志系統切換,都不需要修改這里的代碼!一個字符都不需要!!

    3. JDK14 日志系統,slf4j-jdk14
    pom.xml?中增加 slf4j-jdk14 依賴包:

  • <dependency>
  • <groupId>org.slf4j</groupId>
  • <artifactId>slf4j-jdk14</artifactId>
  • <version>1.7.22</version>
  • </dependency>
  • jar 包:?slf4j-jdk14-1.7.22.jar
    運行程序,即可看到如下圖輸出:

    4. Simple 日志系統,slf4j-simple
    在?pom.xml?中注釋掉 JDK14 包節點,增加 slf4j-simple 依賴包:

  • <dependency>
  • <groupId>org.slf4j</groupId>
  • <artifactId>slf4j-simple</artifactId>
  • <version>1.7.22</version>
  • </dependency>
  • jar 包:?slf4j-simple-1.7.22.jar
    運行程序,即可看到如下圖不同輸出:

    5. Log4j 日志系統(最常用), slf4j-log4j
    依然是在?pom.xml?中注釋掉 Simple 包節點,增加 slf4j-log4j12 依賴包:

  • <dependency>
  • <groupId>org.slf4j</groupId>
  • <artifactId>slf4j-log4j12</artifactId>
  • <version>1.7.22</version>
  • </dependency>
  • jar 包:?slf4j-log4j12-1.7.22.jar、?log4j-1.2.17.jar

    Log4j 除了導入 jar 包后,還需要增加一下日志格式的配置文件,我新增了一個log4j.properties的日志配置文件,具體 Log4j 詳細配置我之前在?《log4j 項目中的詳細配置》?這篇博客中寫過。運行程序,即可看到如下圖輸出(輸出格式可自己配置):

    6. Logback 日志系統, slf4j-logback
    在?pom.xml?中注釋掉 Log4j 包節點,增加 slf4j-logback 依賴包:

  • <dependency>
  • <groupId>ch.qos.logback</groupId>
  • <artifactId>logback-core</artifactId>
  • <version>1.1.9</version>
  • </dependency>
  • <dependency>
  • <groupId>ch.qos.logback</groupId>
  • <artifactId>logback-classic</artifactId>
  • <version>1.1.9</version>
  • </dependency>
  • jar 包:?logback-core-1.1.9.jar、logback-classic-1.1.9.jar
    運行程序,也可看到如下圖日志輸出:

    總結一下

    看完阿里巴巴的這個開發手冊,的確學到了一些新知識和規范,SLF4J 只是其中一個知識點而已。
    說回 SLF4J 這個日志框架,在下一個開源項目或內部類庫中都強烈推薦使用 SLF4J ,它的好處不言而喻,這也是阿里巴巴強制使用的原因所在。希望這篇文章對你的項目中日志系統有所幫助,任何一個任何編程語言的開發者,都應該重視日志的重要性和編碼規范,對你、團隊和未來閱讀你代碼的人都好,相信我,他們肯定會感激你的。

    轉載于:https://www.cnblogs.com/studyskill/p/9558084.html

    總結

    以上是生活随笔為你收集整理的ref:下一个项目为什么要用 SLF4J的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。