換掉 Log4j2!tinylog 橫空出世,無需定義 logger 變數,簡單、輕量、效能爆炸!
背景
前段時間,日誌框架各種爆雷,包括:Log4j 1.x, Log4j 2.x, Logback 等都有爆雷,幾乎是團滅:
Log4j, Logback 都是主流的日誌框架,功能也非常強大,不僅僅是日誌記錄,所以,功能多,自然也會帶來更多的漏洞。。
其實我們使用日誌框架,最多的還是記錄系統日誌,其他的亂七八糟的功能用的非常少,所以,如果你想尋求一款簡單的日誌記錄框架,可以試試這款輕量級的開源日誌框架——tinylog。
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 此時的效能真的吊打其他日誌框架!
更多基準測試可以參考官方的報告:
這麼牛逼!大家想不想試試呢?
整合實戰
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 全域性變數,真爽。。
本文實戰原始碼完整版已經上傳:
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,一個輸出到控制檯,一個寫入檔案,並每天按時進行日誌切割歸檔。
更多的日誌配置可以參考官方文件:
總結
tinylog 於 2014 年開源,到目前已經有快 8 個年頭了,版本也是從 1.x 到如今的 2.x,最新版本為:2.4.1,並且 v2.5 也在路上了,從官方倉庫看,更新頻繁還挺高。
如果你想尋求一款簡單的日誌框架,tinylog 足夠輕量,使用簡單,效能牛逼,也是一個不錯的選擇。
可惜的是,tinylog 只是款小眾日誌框架,算不上主流,國內資料也還較少,所以,如果不是深度使用,倒是可以嘗試,否則可能還有不少學習成本,大家還是要權衡利弊的。
本文實戰原始碼完整版已經上傳:
歡迎 Star 學習,後面 Spring Boot 示例都會在這上面提供!
在座的各位有用 tinylog 的麼?歡迎留言分享~
最後,如果你想關注和學習最新、最主流的 Java 技術,可以持續關注公眾號Java技術棧,公眾號第一時間推送。
版權宣告!!!
本文系公眾號 "Java技術棧" 原創,轉載、引用本文內容請註明出處,抄襲、洗稿一律投訴侵權,後果自負,並保留追究其法律責任的權利。
近期熱文推薦:
1.1,000+ 道 Java面試題及答案整理(2022最新版)
4.Spring Boot 2.6 正式釋出,一大波新特性。。
覺得不錯,別忘了隨手點贊+轉發哦!