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),目錄結構如下:

SLF4J_ProjectTree.png

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

  1. <dependency>
  2. <groupId>org.slf4j</groupId>
  3. <artifactId>slf4j-api</artifactId>
  4. <version>1.7.22</version>
  5. </dependency>

jar 包:?slf4j-api-1.7.22.jar
接著并在測試項目中的?App.java?中加入日志輸出代碼,代碼如下:

  1. package xyz.mafly.SLF4JTest;
  2. import org.slf4j.Logger;
  3. import org.slf4j.LoggerFactory;
  4. /**
  5. * Hello world!
  6. *
  7. */
  8. public class App {
  9. final Logger logger = LoggerFactory.getLogger(App.class);
  10. private void test() {
  11. logger.info("這是一條日志信息 - {}", "mafly");
  12. }
  13. public static void main(String[] args) {
  14. App app = new App();
  15. app.test();
  16. System.out.println("Hello World!");
  17. }
  18. }

到這里,代碼就寫完了、寫完了。以后無論在 Log4j 還是 Logback 日志系統切換,都不需要修改這里的代碼!一個字符都不需要!!

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

  1. <dependency>
  2. <groupId>org.slf4j</groupId>
  3. <artifactId>slf4j-jdk14</artifactId>
  4. <version>1.7.22</version>
  5. </dependency>

jar 包:?slf4j-jdk14-1.7.22.jar
運行程序,即可看到如下圖輸出:

slf4j_jdk14.png

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

  1. <dependency>
  2. <groupId>org.slf4j</groupId>
  3. <artifactId>slf4j-simple</artifactId>
  4. <version>1.7.22</version>
  5. </dependency>

jar 包:?slf4j-simple-1.7.22.jar
運行程序,即可看到如下圖不同輸出:

slf4j_simple.png

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

  1. <dependency>
  2. <groupId>org.slf4j</groupId>
  3. <artifactId>slf4j-log4j12</artifactId>
  4. <version>1.7.22</version>
  5. </dependency>

jar 包:?slf4j-log4j12-1.7.22.jar、?log4j-1.2.17.jar

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

slf4j_log4j.png

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

  1. <dependency>
  2. <groupId>ch.qos.logback</groupId>
  3. <artifactId>logback-core</artifactId>
  4. <version>1.1.9</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>ch.qos.logback</groupId>
  8. <artifactId>logback-classic</artifactId>
  9. <version>1.1.9</version>
  10. </dependency>

jar 包:?logback-core-1.1.9.jarlogback-classic-1.1.9.jar
運行程序,也可看到如下圖日志輸出:

slf4j_logback.png

總結一下

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

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

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

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

相關文章

洛谷P5055 【模板】可持久化文藝平衡樹(FHQ Treap)

題面 傳送門 題解 日常敲板子.jpg //minamoto #include<bits/stdc.h> #define R register #define inline __inline__ __attribute__((always_inline)) #define fp(i,a,b) for(R int i(a),I(b)1;i<I;i) #define fd(i,a,b) for(R int i(a),I(b)-1;i>I;--i) #define …

計算機突然藍屏無法啟動_為什么計算機無法立即啟動?

計算機突然藍屏無法啟動With the newer, more powerful hardware and improved operating systems that we have available to use these days, why does it still take as long as it does to fully boot a computer up each time? 借助我們如今可以使用的更新&#xff0c;更…

CCNA課堂練習:OSPF的介紹及配置

CCNA淺談OSPF的配置 今天我們來談談路由器OSPF的配置&#xff0c;那我先來介紹一下OSPF的特點&#xff1a;1、對網絡發生的變化能夠快速響應2、當網絡發生變化的時候發送觸發式更新?3、支持VLAN 4、管理方便ospf引用了區域的概念&#xff0c;區域分兩種&#xff1a;1、骨干區域…

vcenter 6.7 (vcsa)部署指南

閑言少敘&#xff0c;直達心靈。 一、部署提要1.1 vCenter Server Appliance(VCSA )6.7下載地址https://pan.baidu.com/s/1WUShsC23E2qIIBg7MPR87w 6lzb 二、安裝部署VCSA分為兩個階段安裝&#xff0c;下面我們開始第一階段2.1 打開之后&#xff0c;直接點擊安裝按鈕2.2部署設備…

如何停止Internet Explorer 11的建議站點?

Internet Explorer automatically suggests addresses and search results based on the partial address you’re typing out. If this feature irritates you, read on as we learn how to turn it off. Internet Explorer會根據您鍵入的部分地址自動建議地址和搜索結果。 如…

什么是SG?+SG模板

先&#xff0c;定義一下 狀態Position P 先手必敗 N x先手必勝 操作方法&#xff1a; 反向轉移 相同狀態 不同位置 的一對 相當于無 對于ICG游戲&#xff0c;我們可以將游戲中每一個可能發生的局面表示為一個點。并且若存在局面i和局面j&#xff0c;且j是i的后繼局面(即局面i可…

【桌面虛擬化】之三 Persistent vs NonP

作者&#xff1a;范軍 &#xff08;Frank Fan&#xff09; 新浪微博&#xff1a;frankfan7 在【桌面虛擬化】之二類型及案例中我們探討了桌面虛擬化的兩種架構&#xff0c;HostedVirtual Desktop (VDI) 和 Published Desktop/App. 本文深入分析其中VDI的兩種桌面類型&#xff0…

H5 video 開發問題及相關知識點

相關鏈接&#xff1a;H5 video 的使用H5 video 全屏播放? video點播與直播H5 video目前所有瀏覽器都支持的視頻格式是MP4格式&#xff0c;所以mp4應當是點播web視頻的首選格式。而在直播視頻上&#xff0c;H5 video只在移動端原生支持HLS流的直播視頻(Mac safari video標簽也支…

Mybatis-Generator自動生成XML文件以及接口和實體類

整合了MySQL和Oracle配置文件生成方法 這個是整個文件夾的下載地址&#xff1a;http://www.codepeople.cn/download 主要給大家介紹一下generatorConfig.xml文件的配置&#xff0c;以及生成后的文件。 generatorConfig.xml <?xml version"1.0" encoding"UTF…

如何在Windows 10上設置默認Linux發行版

Windows 10 now allows you to install multiple Linux environments, starting with the Fall Creators Update. If you have multiple Linux environments, you can set your default and switch between them. Windows 10現在允許您從Fall Creators Update開始安裝多個Linux…

mysql全備份+增量備份筆記總結

備份基礎知識 冷備&#xff08;cold backup&#xff09;&#xff1a;需要關mysql服務&#xff0c;讀寫請求均不允許狀態下進行&#xff1b; 溫備&#xff08;warm backup&#xff09;&#xff1a; 服務在線&#xff0c;但僅支持讀請求&#xff0c;不允許寫請求&#xff1b; 熱備…

pjax學習

PJAX 介紹 紅薯 發布于 2012/04/11 22:06閱讀 61K收藏 116評論 11jQuery.Pjax kissy開發四年只會寫業務代碼&#xff0c;分布式高并發都不會還做程序員&#xff1f;->>> 介紹 pushState是一個可以操作history的api&#xff0c;該api的介紹和使用請見這里&#xff1a…

SQL Server 2000詳細安裝過程及配置

說明&#xff1a;這篇文章是幾年前我發布在網易博客當中的原創文章&#xff0c;但由于網易博客現在要停止運營了&#xff0c;所以我就把這篇文章搬了過來&#xff0c;雖然現如今SQL Server 2000軟件早已經過時了&#xff0c;但仍然有一部分人在使用它&#xff0c;尤其是某些高校…

移動應用ios和網頁應用_如何在iOS上一次移動多個應用

移動應用ios和網頁應用Apple doesn’t really believe in detailed instruction manuals, so some handy tricks slip through the cracks. One such trick we’ve recently discovered is that you can move multiple app icons at once on iOS. Here’s how. Apple并不真正相…

如何將內核靜態庫編譯連接到驅動程序中去【轉】

轉自&#xff1a;http://blog.csdn.net/ganjianfeng2003/article/details/8089551 如何將內核靜態庫編譯連接到驅動程序中去 2010-12-07 08:27 331人閱讀 評論(1) 收藏 舉報 http://blog.chinaunix.net/u2/61663/showart_2404744.html 剛上郵箱的時候發現一位網友向我詢問這個問…

2018-2019 20165226 Exp9 Web安全基礎

2018-2019 20165226 Exp9 Web安全基礎 目錄 一、實驗內容說明及基礎問題回答 二、實驗過程 Webgoat準備XSS攻擊 ① Phishing with XSS 跨站腳本釣魚攻擊② Stored XSS Attacks 存儲型XSS攻擊③ Reflected XSS Attacks 反射型XSS攻擊 CSRF攻擊 ① Cross Site Request Forgery(CS…

用 git 同步 Colab 與 Gitlab、Github 之間的文件

Colab 是谷歌提供的免費 Jupyter 服務&#xff0c;可使用 GPU。但由于每次的 VM &#xff08;虛擬機&#xff09;登出后所有文件都會連同&#xff36;&#xff2d;被毀掉。如何將一個項目里的程序或數據同步到 Colab則往往比較麻煩。盡管谷歌盤也可以掛到 Colab 里用&#xff0…

keep-alive使用_如何使用Google Keep進行無憂筆記

keep-alive使用There are a lot of note-taking apps out there. Google Keep may not be as powerful as services like Evernote, but its value is in its simplicity. Let’s talk about how to make the most of it. 那里有很多筆記應用程序。 Google Keep可能不如Evernot…

ZedGraph在項目中的應用

ZedGraph在項目中的應用將數據庫數據提取出來&#xff0c;顯示成曲線圖&#xff08;餅狀、柱狀或立體圖&#xff09;是項目中最常見的需求。 網上搜索到的解決方法&#xff0c;大多歸為兩類&#xff0c;一種是利用ActiveX組件&#xff0c;另一種是使用.net框架自帶的畫圖的類。…

TCP/IP:IP多播選路

本節主要討論多播選路&#xff0c;是在整個互聯網上的多播&#xff0c;我們將討論mrouted程序的執行&#xff0c;該程序計算多播路由表&#xff0c;以及再網絡之間轉發多播數據包的內核函數。 多播輸出處理 這個和IGMP的輸出處理類似&#xff0c;主要要注意有環回的多播輸出和沒…