1. 程式人生 > 其它 >換掉 Log4j2!tinylog 橫空出世,無需定義 logger 變數,簡單、輕量、效能爆炸!

換掉 Log4j2!tinylog 橫空出世,無需定義 logger 變數,簡單、輕量、效能爆炸!

背景

前段時間,日誌框架各種爆雷,包括:Log4j 1.x, Log4j 2.x, Logback 等都有爆雷,幾乎是團滅:

Log4j 2.3.1 釋出!又是什麼鬼??

Logback 也爆雷了,驚爆了。。。

Log4j, Logback 都是主流的日誌框架,功能也非常強大,不僅僅是日誌記錄,所以,功能多,自然也會帶來更多的漏洞。。

其實我們使用日誌框架,最多的還是記錄系統日誌,其他的亂七八糟的功能用的非常少,所以,如果你想尋求一款簡單的日誌記錄框架,可以試試這款輕量級的開源日誌框架——tinylog

tinylog

基本介紹

官方網站:

https://tinylog.org/

開源地址:

https://github.com/tinylog-org/tinylog

見名知義,tinylog 即:迷你日誌,它的主要目標就是簡化日誌記錄操作

支援的語言:

  • Java(Java 6+)
  • Kotlin
  • Scala
  • ...等其他 JVM 系語言(包括 Android)

支援的日誌級別:

  • TRACE
  • DEBUG
  • INFO
  • WARN
  • ERROR
  • OFF(禁用日誌輸出)

輕量級

tinylog 主打輕量級,那麼,tinylog 到底有多輕量??

棧長體驗了一翻,總結了以下三點:

  • 僅有兩個 jar 包,一個是 API,一個是實現,無任何其他依賴;
  • 兩個 jar 包總大小僅為 178 KB
  • 無需全域性靜態變數,開箱即用;

來看 tinylog 的使用方式:

import org.tinylog.Logger; 

public class Application {     
	public static void main(String[] args) {        
		Logger.info("歡迎關注公眾號:Java技術棧!");    
	}
}

這裡就可以看到 tinylog 的優勢了,不需要再新增像 logger 這樣的全域性靜態變量了:

private final Logger logger = LoggerFactory.getLogger(this.getClass());

可以直接使用 Logger.info 等靜態方法,也還能使用 {} 引數佔位符,不能太方便了!

另外,大家可以關注公眾號Java技術棧,在選單欄檢視棧長分享的往期系列 Java 精選好用技術及工具等。

日誌效能

tinylog 對日誌輸出做了優化,日誌輸出效能更是十分了得,最快的時候甚至比 Log4j2 和 Logback 快數倍!

比如使用以下我們常用的格式輸出日誌:

{date:yyyy-MM-dd HH:mm:ss} - {thread} - {class}.{method}() - {level}: {message}

tinylog 此時的效能真的吊打其他日誌框架!

更多基準測試可以參考官方的報告:

https://tinylog.org/v2/benchmark/

這麼牛逼!大家想不想試試呢?

整合實戰

1)引入依賴

我們只需要引入 tinylog-impl 即可:

<dependency>
    <groupId>org.tinylog</groupId>
    <artifactId>tinylog-impl</artifactId>
    <version>${tinylog.version}</version>
</dependency>

此時,其依賴的 API 包也會一起包含進來:

2)實戰示例

棧長使用的是 Spring Boot,加一個 CommandLineRunner,可以直接讓系統啟動的時候輸出日誌:

@Bean
public CommandLineRunner commandLineRunner() {
    return (args) -> {
        Logger.info("hello, tinylog!");
    };
}

CommandLineRunner 不清楚的可以關注公眾號Java技術棧,在選單欄閱讀棧長寫的系列 Spring Boot 教程。

不用在每個類中寫 logger 全域性變數,真爽。。

本文實戰原始碼完整版已經上傳:

https://github.com/javastacks/spring-boot-best-practice

3)啟動驗證

現在我們來啟動系統:

如圖,系統在啟動後輸出了我們的日誌。

4、更多配置

如果你想自定義日誌配置,可以在資源目錄下建立一個日誌配置檔案:tinylog.properties

參考示例如下:

level            = INFO

writer1          = console
writer1.format   = {date: HH:mm:ss.SSS} {class}.{method}() {level}: {message}

writer2          = rolling file
writer2.file     = logs/{date: yyyy-MM-dd}/log_{count}.log
writer2.policies = startup, daily: 02:00
writer2.format   = {date: HH:mm:ss} [{thread}] {level}: {message}: {message}

此時日誌級別為:info,建立了兩個 writer,一個輸出到控制檯,一個寫入檔案,並每天按時進行日誌切割歸檔。

更多的日誌配置可以參考官方文件:

https://tinylog.org/v2/configuration/

總結

tinylog 於 2014 年開源,到目前已經有快 8 個年頭了,版本也是從 1.x 到如今的 2.x,最新版本為:2.4.1,並且 v2.5 也在路上了,從官方倉庫看,更新頻繁還挺高。

如果你想尋求一款簡單的日誌框架,tinylog 足夠輕量,使用簡單,效能牛逼,也是一個不錯的選擇。

可惜的是,tinylog 只是款小眾日誌框架,算不上主流,國內資料也還較少,所以,如果不是深度使用,倒是可以嘗試,否則可能還有不少學習成本,大家還是要權衡利弊的。

本文實戰原始碼完整版已經上傳:

https://github.com/javastacks/spring-boot-best-practice

歡迎 Star 學習,後面 Spring Boot 示例都會在這上面提供!

在座的各位有用 tinylog 的麼?歡迎留言分享~

最後,如果你想關注和學習最新、最主流的 Java 技術,可以持續關注公眾號Java技術棧,公眾號第一時間推送。

版權宣告!!!

本文系公眾號 "Java技術棧" 原創,轉載、引用本文內容請註明出處,抄襲、洗稿一律投訴侵權,後果自負,並保留追究其法律責任的權利。

近期熱文推薦:

1.1,000+ 道 Java面試題及答案整理(2022最新版)

2.勁爆!Java 協程要來了。。。

3.Spring Boot 2.x 教程,太全了!

4.Spring Boot 2.6 正式釋出,一大波新特性。。

5.《Java開發手冊(嵩山版)》最新發布,速速下載!

覺得不錯,別忘了隨手點贊+轉發哦!