重新登录:重新登录
我已經寫在此之前這里 。 為了理解當前文章,閱讀本書并不是強制性的,但可以粗略地看一下它,以設置本文的上下文。
在第一篇文章中,我介紹了日志記錄作為無所不在的System.out.println()的一種高收益,低成本的替代方法,所有Java人士都非常喜歡它。 我在那篇文章中使用過log4j 。 Log4j是一個可靠的框架,并兌現了承諾。 在使用它的所有年份中,它從未讓我失望。 我可以全心全意地推薦它。 但是,話雖如此,也很少有替代品,這些替代品在市場上已經存在了一段時間。我很高興地說,其中至少有一個似乎在挑戰自己的地盤log4j。 我說的是Logback 。 當然,這并不是一個新手,這就是我建議您從企業級應用程序開始考慮的原因之一。 快速瀏覽一下Maven Central ,發現第一版發布于2006年。在2006年至2012年6月8日之間,也就是最新版本推向Maven Central時,已經有46個版本。 將此與log4j進行比較。 第一個版本于2005年在Maven Central推出,最后一個版本于2012年5月26日發布,在這些版本之間共有14個不同的版本。 我并不是要使用這些數據來比較這兩個框架。 唯一的目的是向讀者保證Logback已經存在了很長時間,并且已經足夠引起人們的重視。 在身邊是一回事,留下自己的印記是不同的。 就雄心和意圖而言,Logback清楚地表明它打算成為log4j的后繼者-并在其主頁上明確表示。 當然,Logback聲稱它比Log4j具有詳盡的功能/優點列表。 您可以在此鏈接上閱讀有關它們的信息。 就是這樣。 本文的重點是,我建議在設計和開發基于企業級Java的應用程序時,應更加仔細地記錄日志,并考慮使用Logback 。 我希望現在有一些觀眾愿意大聲疾呼,激發他們最喜歡的編輯器,并選擇Logback試一試。 如果您是其中之一,那么您和我有一些共同點。 您可能想繼續閱讀。 Logback承諾的第一件事就是更快的實現(在此鏈接處 )。 真? 我想核實這一說法。 我首先使用Maven創建一個香草Java應用程序。檔案:MavenCommands.bat
call mvn archetype:create ^-DarchetypeGroupId=org.apache.maven.archetypes ^-DgroupId=org.academy ^-DartifactId=logger不幸的是,它已經預裝了JUnit3。我設置了JUnit 4,還添加了Contiperf,這樣我可以多次運行測試-如果要檢查性能,這將很方便。
文件:/logger/pom.xml
[...]UTF-84.102.2.0[...] [...]junitjunit${junit.version}testorg.databenecontiperf${contiperf.version}test另外,我想顯式控制用于編譯和執行代碼的Java版本。
文件:/logger/pom.xml
[...]2.0.21.7[...]org.apache.maven.pluginsmaven-compiler-plugin${maven-compiler-plugin.version}${java.version} ${java.version}最后配置–暫時。 隨心所欲地運行單元測試。
文件:/logger/pom.xml
[...]2.12[...]org.apache.maven.pluginsmaven-surefire-plugin${maven-surefire-plugin.version}org.apache.maven.surefiresurefire-junit47${maven-surefire-plugin.version}-XX:-UseSplitVerifier請注意,我竭盡全力將所有這些依賴項及其版本添加到本文中,只是為了確保您自己嘗試一下,您確切知道測試的軟件配置是什么。
現在,讓我們最后添加單元測試。
文件:/logger/src/test/java/org/academy/AppTest.java
public class AppTest { private final static Logger logger = LoggerFactory .getLogger(AppTest.class); @Rule public ContiPerfRule i = new ContiPerfRule(); @Test @PerfTest(invocations = 10, threads = 1) @Required(max = 1200, average = 1000) public void test() { for(int i = 0; i<10000 ; i++){ logger.debug("Hello {}", "world."); } } }因此,我們在單元測試中使用了logger,但未添加logger的實現。 我打算做的是一個接一個地添加log4j(帶有slf4j)和logback(帶有slf4j的固有支持),并多次運行此簡單測試以比較性能。
要添加log4j,我使用了此設置。
文件:/logger/pom.xml
org.slf4jslf4j-api${slf4j.version}org.slf4jjcl-over-slf4j${slf4j.version}runtimeorg.slf4jslf4j-log4j12${slf4j.version}runtime對于登錄,我使用了此設置。
文件:/logger/pom.xml
ch.qos.logbacklogback-classic${logback.version}具有以下版本。
文件:/logger/pom.xml
1.6.11.0.6為了使這兩個記錄器框架中的任何一個實際記錄任何內容,您必須添加一個文件,告訴記錄器要記錄什么以及在何處。
文件:src / main / resources / log4j.properties
# Set root logger level to DEBUG and its only appender to A1. log4j.rootLogger=DEBUG, A1# configure A1 to spit out data in console log4j.appender.A1=org.apache.log4j.ConsoleAppender log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p %c - %m%n 最后,是關鍵時刻。 我對每個框架(即logback和log4j)進行了三次測試。 本質上,我在每次測試中將字符串log.debug()進行1000,000次并計時。 這就是最終數字出來的方式。| 退回 | 0.375秒 | 0.375秒 | 0.406秒 |
| Log4j | 0.454秒 | 0.453秒 | 0.454秒 |
參考:在Tech for Enterprise博客上,從我們的JCG合作伙伴 Partho 重新獲得了日志記錄 。
翻譯自: https://www.javacodegeeks.com/2012/07/logback-logging-revisited.html
總結
- 上一篇: Tomcat上下文JUnit @Rule
- 下一篇: 终极JPA查询和技巧列表–第3部分