tinylog || Log4j 诅蝶、Logback 替代品

推薦:花了2萬(wàn)多買(mǎi)的Java架構(gòu)師課程全套候生,現(xiàn)在分享給大家纱皆,從軟件安裝到底層源碼(Java高級(jí)互聯(lián)網(wǎng)架構(gòu)師VIP教程)

TinyLog是Java的簡(jiǎn)單輕量級(jí)日志記錄框架湾趾。我們可以將tinylog與Java,Kotlin派草,Scala和Android應(yīng)用程序一起使用搀缠。

TinyLog日志記錄框架的好處

避免Logger初始化的樣板代碼。tinylog中的Logger類(lèi)是靜態(tài)的近迁,可直接用于記錄消息艺普。

支持其他流行的JVM語(yǔ)言,例如Kotlin和Scala鉴竭。

也支持使用logcat的android應(yīng)用程序歧譬。

tinylog罐子重量輕且尺寸小。tinylog 2.x版本的API jar為48 kb搏存,實(shí)現(xiàn)jar為72 kb瑰步。

可以使用JDBC和DataSource將輸出發(fā)送到控制臺(tái),文件璧眠,數(shù)據(jù)庫(kù)缩焦。

配置文件非常簡(jiǎn)單读虏。對(duì)于基于控制臺(tái)的簡(jiǎn)單日志記錄,我們不需要任何配置文件袁滥。

它是免費(fèi)和開(kāi)源的盖桥。完整的項(xiàng)目代碼托管在GitHub上 。

根據(jù)他們自己的基準(zhǔn)測(cè)試 题翻,它們比Log4J日志記錄框架快得多揩徊。

不依賴(lài)于任何其他API和框架。

支持創(chuàng)建標(biāo)簽以對(duì)日志消息進(jìn)行分類(lèi)嵌赠。這對(duì)于從巨大的日志文件中過(guò)濾日志消息非常有用塑荒。

懶惰日志支持僅在需要日志時(shí)才推遲昂貴的計(jì)算。

TinyLog日志入門(mén)

我們必須在項(xiàng)目類(lèi)路徑中包含以下jar猾普。這些是撰寫(xiě)本教程時(shí)tinylog框架的最新版本袜炕。

  • tinylog-api-2.0.0-RC1.jar

  • tinylog-impl-2.0.0-RC1.jar

大多數(shù)時(shí)候本谜,我們使用Maven或Gradle進(jìn)行項(xiàng)目構(gòu)建和依賴(lài)管理初家。

Minelog的Maven依賴(lài)關(guān)系

<dependency>
<groupId>org.tinylog</groupId>
<artifactId>tinylog-api</artifactId>
<version>2.0.0-RC1</version>
</dependency>
<dependency>
<groupId>org.tinylog</groupId>
<artifactId>tinylog-impl</artifactId>
<version>2.0.0-RC1</version>
</dependency>

tinylog的Gradle依賴(lài)關(guān)系

implementation 'org.tinylog:tinylog-api:2.0.0-RC1'
implementation 'org.tinylog:tinylog-impl:2.0.0-RC1'

上面的實(shí)現(xiàn)jar適用于基于JVM的應(yīng)用程序。對(duì)于Kotlin乌助,Scala溜在,Android,SLF4J和JCL他托,有單獨(dú)的實(shí)現(xiàn)jar掖肋。您必須根據(jù)您的項(xiàng)目類(lèi)型包括實(shí)施JAR。

**# 使用tinylog記錄器 **

將所需的jar添加到項(xiàng)目類(lèi)路徑后赏参,我們可以使用其Logger類(lèi)編寫(xiě)日志消息志笼。

下圖顯示了我的Eclipse項(xiàng)目結(jié)構(gòu)。

TinyLog Example Project

TinyLog示例項(xiàng)目

這是我使用tinylog Logger進(jìn)行記錄的類(lèi)把篓。

Employee.java :一個(gè)簡(jiǎn)單的模型類(lèi)纫溃,具有一些屬性及其getter-setter方法 。

package com.journaldev.tinylog;

import org.tinylog.Logger;
 
public class Employee {
 
private int id;
private String name;
 
public String getName() {
Logger.debug("Returning employee name " + this.name);
return name;
}
 
public void setName(String name) {
Logger.info("Setting employee name " + name);
this.name = name;
}
 
public int getId() {
Logger.debug("Returning employee id " + this.id);
return id;
}
 
public void setId(int id) {
Logger.info("Setting employee id " + id);
this.id = id;
}
}

EmployeeService.java :一個(gè)簡(jiǎn)單的服務(wù)類(lèi)韧掩,提供了一種創(chuàng)建Employee對(duì)象的方法紊浩。

package com.journaldev.tinylog;
 
import org.tinylog.Logger;
 
public class EmployeeService {
 
public Employee createEmployee(int i, String n) {
Logger.info("Creating Employee with ID = " + i + " and Name = " + n);
Employee emp = new Employee();
emp.setId(i);
emp.setName(n);
return emp;
}
  
}

EmployeeMain.java :運(yùn)行我們的簡(jiǎn)單項(xiàng)目的主類(lèi)。

package com.journaldev.tinylog;
 
import org.tinylog.Logger;
 
public class EmployeeMain {
 
public static void main(String[] args) {    
Logger.debug("Program Started");
    
EmployeeService empService = new EmployeeService();
 
Employee emp = empService.createEmployee(10, "Pankaj");
 
System.out.println("Employee ID = " + emp.getId());
System.out.println("Employee Name = " + emp.getName());
 
Logger.debug("Program Finished");
}
}

當(dāng)我們運(yùn)行上述程序時(shí)疗锐,它將生成以下輸出坊谁。請(qǐng)注意,我們目前尚未創(chuàng)建tinylog配置文件滑臊。

TinyLog記錄級(jí)別

記錄器支持五個(gè)記錄級(jí)別-跟蹤口芍,調(diào)試,信息雇卷,警告和錯(cuò)誤鬓椭。默認(rèn)值和最低優(yōu)先級(jí)為“跟蹤”虹钮。最高優(yōu)先級(jí)是“錯(cuò)誤”。我們可以在配置文件中設(shè)置日志記錄級(jí)別膘融。設(shè)置級(jí)別和更高優(yōu)先級(jí)的日志消息將被記錄芙粱。

TinyLog配置文件

TinyLog在類(lèi)路徑中尋找tinylog.properties文件,以配置日志記錄選項(xiàng)氧映。我們通常在資源目錄中創(chuàng)建此文件春畔。讓我們創(chuàng)建第一個(gè)tinylog配置文件。

tinylog.properties :

writer        = console
writer.format = {date: HH:mm:ss.SSS} {tag} {level}: {message}

當(dāng)我們?cè)俅芜\(yùn)行主程序時(shí)岛都,輸出為:

12:22:47.073  DEBUG: Program Started
12:22:47.076  INFO: Creating Employee with ID = 10 and Name = Pankaj
12:22:47.076  INFO: Setting employee id 10
12:22:47.077  INFO: Setting employee name Pankaj
12:22:47.077  DEBUG: Returning employee id 10
Employee ID = 10
12:22:47.077  DEBUG: Returning employee name Pankaj
Employee Name = Pankaj
12:22:47.077  DEBUG: Program Finished

請(qǐng)注意律姨,日志消息遵循配置文件中提到的格式。

TinyLog標(biāo)簽

我們可以使用以下代碼在代碼中設(shè)置Logger標(biāo)簽臼疫。

Logger.tag("MAIN").debug("Program Started");
 
Logger.tag("MAIN").debug("Program Finished");

更新后的日志消息將包含以下幾行择份。

12:26:12.831 MAIN DEBUG: Program Started
...
12:26:12.835 MAIN DEBUG: Program Finished

我們可以設(shè)置一個(gè)writer標(biāo)簽來(lái)記錄具有該標(biāo)簽的消息,其他消息將被writer忽略烫堤。

writer     = console
writer.tag = SYSTEM

通過(guò)將標(biāo)簽設(shè)置為“-”荣赶,我們可以忽略所有標(biāo)簽,僅記錄未加標(biāo)簽的消息鸽斟。

writer     = console
writer.tag = -

TinyLog配置拔创,可將消息記錄到日志文件中

這是一個(gè)將消息記錄到tinylog.txt文件中的簡(jiǎn)單示例。

writer       =  file
writer.file  = tinylog.txt
writer.level = info
writer.format = {date: HH:mm:ss.SSS} {tag} {level}: {message}

TinyLog也支持讀取環(huán)境變量富蓄。例如剩燥,我們可以使用以下格式指定要在主目錄中生成的日志文件。

writer.file = ${HOME}/tinylog.txt

我們還可以使用#{key}格式在TinyLog配置中讀取系統(tǒng)屬性立倍。

writer.format = #{user.name}: {message}

滾動(dòng)文件編寫(xiě)器配置

writer       = rolling file
writer.file  = tinylog{count}.txt
writer.level = info
writer.format = {date: HH:mm:ss.SSS} {tag} {level}: {message}

擴(kuò)展TingLog

TinyLog是可擴(kuò)展的灭红。我們可以實(shí)現(xiàn)org.tinylog.writers.Writer接口并將其注冊(cè)為服務(wù)。同樣口注,我們可以實(shí)現(xiàn)org.tinylog.policies.Policy接口來(lái)創(chuàng)建自定義策略并進(jìn)行注冊(cè)变擒。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市疆导,隨后出現(xiàn)的幾起案子赁项,更是在濱河造成了極大的恐慌,老刑警劉巖澈段,帶你破解...
    沈念sama閱讀 219,589評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件悠菜,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡败富,警方通過(guò)查閱死者的電腦和手機(jī)悔醋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)兽叮,“玉大人芬骄,你說(shuō)我怎么就攤上這事猾愿。” “怎么了账阻?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,933評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵蒂秘,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我淘太,道長(zhǎng)姻僧,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,976評(píng)論 1 295
  • 正文 為了忘掉前任蒲牧,我火速辦了婚禮撇贺,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘冰抢。我一直安慰自己松嘶,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,999評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布挎扰。 她就那樣靜靜地躺著翠订,像睡著了一般。 火紅的嫁衣襯著肌膚如雪鼓鲁。 梳的紋絲不亂的頭發(fā)上蕴轨,一...
    開(kāi)封第一講書(shū)人閱讀 51,775評(píng)論 1 307
  • 那天港谊,我揣著相機(jī)與錄音骇吭,去河邊找鬼。 笑死歧寺,一個(gè)胖子當(dāng)著我的面吹牛燥狰,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播斜筐,決...
    沈念sama閱讀 40,474評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼龙致,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了顷链?” 一聲冷哼從身側(cè)響起目代,我...
    開(kāi)封第一講書(shū)人閱讀 39,359評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎嗤练,沒(méi)想到半個(gè)月后榛了,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,854評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡煞抬,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,007評(píng)論 3 338
  • 正文 我和宋清朗相戀三年霜大,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片革答。...
    茶點(diǎn)故事閱讀 40,146評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡战坤,死狀恐怖曙强,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情途茫,我是刑警寧澤碟嘴,帶...
    沈念sama閱讀 35,826評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站囊卜,受9級(jí)特大地震影響臀防,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜边败,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,484評(píng)論 3 331
  • 文/蒙蒙 一袱衷、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧笑窜,春花似錦致燥、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,029評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至断傲,卻和暖如春脱吱,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背认罩。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,153評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工箱蝠, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人垦垂。 一個(gè)月前我還...
    沈念sama閱讀 48,420評(píng)論 3 373
  • 正文 我出身青樓宦搬,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親劫拗。 傳聞我的和親對(duì)象是個(gè)殘疾皇子间校,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,107評(píng)論 2 356

推薦閱讀更多精彩內(nèi)容