java開發——slf4j日誌的理解和比較篇

定義:日誌是什麼

日誌主要是程序開發過程中,爲了滿足程序員觀察數據變化搞出的東西。在java1.4之前,都是依靠println()完成這部分內容的。1.4之後,java自己出了一個相關的包。但是可能不是很好用,所以後面出來了一個log4j,還有slf4j之類的日誌包。

爲什麼要用日誌

日誌篇主要記錄的是日誌的用法,我們平時開發的時候,可能會比較喜歡用:System.out.println();的方法來記錄日誌,但是,實際上這種方法可能封裝的信息不是很夠,在真正的企業開發的過程中,我們很可能只依靠sout輸出的內容,很難找到bug出錯的位置。而使用logger,可以方便定位,並且封裝了各樣的信息處理,給我們豐富的提示。

介紹一下SLF4J日誌

簡單日記門面(simple logging Facade for java)SLF4J是爲各種loging APIs提供一個簡單統一的接口,從而使得最終用戶能夠在部署的時候配置自己希望的loging APIs實現。準確的說,slf4j並不是一種具體的日誌系統,而是一個用戶日誌系統的facade,允許用戶在部署最終應用時方便的變更其日誌系統。在系統開發中,統一按照slf4j的API進行開發,在部署時,選擇不同的日誌系統包,即可自動轉換到不同的日誌系統上。比如:選擇JDK自帶的日誌系統,則只需要將slf4j-api-1.5.10.jar和slf4j-jdk14-1.5.10.jar放置到classpath中即可,如果中途無法忍受JDK自帶的日誌系統了,想換成log4j的日誌系統,僅需要用slf4j-log4j12-1.5.10.jar替換slf4j-jdk14-1.5.10.jar即可(當然也需要log4j的jar及配置文件)。
所以,SJF4J的使用,其內核需要配合其他的日誌框架,如:log4j,logback之類的。具體的調用關係可以參考這

怎麼使用

直接上demo:
maven項目的話要導入相關的包,我這裏的demo是slf4j的使用。不過springboot2.x版本好像都自帶這相關的日誌包了,都不用你去寫dependency了。

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.22</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.7.21</version>
</dependency>

這是一個定時器的代碼,配置好了每分鐘輸出一條日誌。

package com.demo.javaspring.定時器;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.Calendar;
@Component
@EnableScheduling
public class scheduleDemo {
    Logger logger = LoggerFactory.getLogger(scheduleDemo.class.getName());

    @Scheduled(cron = "0 */1 * * * ?")
    public void run() {
        logger.info("Current time is {}" , Calendar.getInstance().getTime());
        System.out.println();
    }
}

上面代碼可以看出,日誌的輸出方式類似於c語言的format方式。其中{}就是以前的%s的方式,變量會被注入到這個{}的位置替代他。好處是節省了string常量池的空間。

結束語

最後,可能還可以補充一下需要的幾個接口的基本使用和如何配合使用讓自己最舒服的定位錯誤。不過,看之後時間吧。覺得需要的朋友可以點個贊,給我動力更新一波。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章