使用tinylog 1.0简化您的日志记录
tinylog的大小僅為75 KB,是廣泛使用的經(jīng)典日志記錄框架Log4j和Logback的輕型替代方案。 經(jīng)過(guò)三年的開(kāi)發(fā),最終版本1.0剛剛于 3月底發(fā)布 。 在幾個(gè)設(shè)計(jì)問(wèn)題中,tinylog采取了與Java中經(jīng)典日志記錄框架完全不同的方法。 本文將介紹與Log4j和Logback的區(qū)別和相似之處,并在tinylog中進(jìn)行簡(jiǎn)要介紹。
靜態(tài)記錄器
通常,對(duì)于每個(gè)使用日志記錄的類(lèi),都必須創(chuàng)建自己的記錄器實(shí)例。 所有這些記錄器都按層次結(jié)構(gòu)命名,通常使用完全限定的類(lèi)名。 在SLF4J(Logback的日志記錄API)以及Log4j 1.x中,必須顯式傳遞類(lèi)名:
public class MyClass {private static final Logger logger = Logger.getLogger(MyClass.class);}與常規(guī)工作一樣,記錄器的創(chuàng)建通常是從其他類(lèi)中復(fù)制的。 但是在這種情況下,很容易忘記更改class參數(shù),這可能導(dǎo)致錯(cuò)誤的日志條目。 為避免此類(lèi)問(wèn)題,Log4j 2.x能夠自行檢測(cè)該類(lèi)。 不再需要將類(lèi)名作為參數(shù)傳遞。 tinylog更進(jìn)一步,并且不再需要為每個(gè)類(lèi)創(chuàng)建自己的記錄器實(shí)例。 相反,tinylog具有靜態(tài)記錄器,可以在其上直接調(diào)用所有記錄方法:
public class Application {public static void main(String[] args) {Logger.info("Hello {}!", args[0]);}}組態(tài)
可以通過(guò)三種方式配置tinylog:通過(guò)屬性文件,通過(guò)系統(tǒng)屬性(可以設(shè)置為“ -D”參數(shù))和通過(guò)流暢的API編程。 配置在運(yùn)行時(shí)可以更改,并且始終始終設(shè)置為原子。 對(duì)于生產(chǎn)環(huán)境,建議將名稱(chēng)為“ tinylog.properties”的屬性文件放入默認(rèn)包中。 如果未明確指定其他配置,tinylog將默認(rèn)加載此屬性文件。
缺省情況下,tinylog僅輸出日志級(jí)別為info或更高的日志條目。 所有其他將被丟棄。 特別是對(duì)于開(kāi)發(fā)環(huán)境,更改全局日志記錄級(jí)別以進(jìn)行調(diào)試以及更改某些軟件包或類(lèi)來(lái)進(jìn)行跟蹤是有意義的。 具有定義的日志格式和日志記錄級(jí)別的屬性文件可能類(lèi)似于以下示例:
tinylog.level = debug tinylog.level@com.example = trace tinylog.format = {level}: {class}.{method}()\t{message}伐木作家
tinylog默認(rèn)將所有日志條目寫(xiě)入控制臺(tái)。 可以通過(guò)定義另一個(gè)編寫(xiě)器來(lái)覆蓋此默認(rèn)行為。 除了寫(xiě)入控制臺(tái)外,還支持寫(xiě)入文件和SQL數(shù)據(jù)庫(kù)。 tinylog具有三種不同的寫(xiě)入文件的編寫(xiě)器: FileWriter , SharedFileWriter和RollingFileWriter 。 FileWriter將日志條目寫(xiě)入定義的日志文件。 例如,可以通過(guò)以下方式在屬性文件中定義它:
tinylog.writer = file tinylog.writer.filename = log.txtSharedFileWriter工作方式與FileWriter相同,但是支持將應(yīng)用程序的多個(gè)實(shí)例同時(shí)記錄到同一日志文件中,而不會(huì)發(fā)生任何沖突。 RollingFileWriter允許在重新啟動(dòng)應(yīng)用程序后繼續(xù)現(xiàn)有的日志文件。 可以通過(guò)策略指定何時(shí)必須啟動(dòng)新的日志文件。 可以將定義數(shù)量的舊日志文件存儲(chǔ)為備份。 在此示例中,每天將啟動(dòng)一個(gè)新的日志文件,并且最近7天的日志文件將作為備份存儲(chǔ),并以時(shí)間戳記命名:
tinylog.writer = rollingfile tinylog.writer.filename = log.txt tinylog.writer.policies = daily tinylog.writer.backups = 7 tinylog.writer.label = timestamp性能
通常,每個(gè)日志條目的日志記錄成本僅為幾納秒。 但是,可以通過(guò)幾種選擇來(lái)提高速度。 最有效的方法是通過(guò)設(shè)置屬性“ tinylog.writer.buffered=true ”并通過(guò)“ tinylog.writingthread=true ”激活寫(xiě)入線程來(lái)啟用緩沖寫(xiě)入,以避免主應(yīng)用程序被緩慢的IO操作阻塞。 但是兩者都有一個(gè)缺點(diǎn),就是在JVM崩潰后,最后一個(gè)日志條目(因此也是最重要的日志條目)可能會(huì)丟失。
特別是對(duì)于大型項(xiàng)目,通常將類(lèi)和方法名稱(chēng)與每個(gè)日志條目一起輸出,以簡(jiǎn)化查找相應(yīng)代碼的過(guò)程。 但是Log4j和Logback警告說(shuō),這將導(dǎo)致性能損失,因?yàn)榇祟?lèi)堆棧跟蹤信息的生成非常昂貴。 由于其體系結(jié)構(gòu),tinylog始終知道堆棧跟蹤中調(diào)用者的確切深度。 因此,tinylog可以?xún)H提取單個(gè)所需的堆棧跟蹤元素,而不必生成整個(gè)堆棧跟蹤。 這樣可以使記錄速度加快多次,而無(wú)需放棄重要的堆棧跟蹤信息。
結(jié)論
本文可能僅在tinylog中進(jìn)行簡(jiǎn)要介紹。 可以在tinylog網(wǎng)站上找到所有配置參數(shù)的完整手冊(cè) 。 tinylog是根據(jù)Apache License 2發(fā)布的 ,因此可以在開(kāi)源以及商業(yè)項(xiàng)目中使用。 還有Log4j 1.x的外觀和SLF4J的綁定以簡(jiǎn)化遷移。 除其他功能外,還計(jì)劃在即將發(fā)布的版本中包括用于寫(xiě)入的包含和排除以及用于通過(guò)郵件發(fā)送日志的MailWriter 。
翻譯自: https://www.javacodegeeks.com/2015/04/simplify-your-logging-with-tinylog-1-0.html
總結(jié)
以上是生活随笔為你收集整理的使用tinylog 1.0简化您的日志记录的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: PicPick全屏电脑网页如何全屏
- 下一篇: CompletableFuture不能被