重新登錄:重新登錄

嗨,我再次回到日志中來,這是任何應用程序設計和開發的固有部分。 我是堅強的基礎知識的忠實擁護者,在我的拙見中,日志記錄是任何企業級應用程序中經常被忽略但基本的關鍵要素之一。

我已經寫在此之前這里 。 為了理解當前文章,閱讀本書并不是強制性的,但可以粗略地看一下它,以設置本文的上下文。

在第一篇文章中,我介紹了日志記錄作為無所不在的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秒
就這個小實驗而言,Logback的執行速度顯然比Log4j快。 當然,這是過于簡單的實驗,并且尚未考慮許多有效方案。 例如,我們還沒有真正使用vanilla log4j。 我們已經將log4j與slf4j API結合使用,這不是完全一樣的。 同樣,更快不是唯一的考慮因素。 Log4j異步工作( 在此處和此處閱讀),而據我所知,Logback并非如此。 Logback具有Log4j沒有的許多漂亮功能。
因此,孤立地看這小小的代碼并不能真正證明任何東西。 如果有的話,它使我回到了我提出的第一點–如果您正在設計/編碼基于Java的企業級應用程序,則Logback具有很大的潛力,值得一看。
這就是本文的全部內容。 快樂的編碼。
想繼續讀嗎? 我可以建議...
本系列的第一篇文章。 應用程序日志記錄的10個技巧。 如何輕松排除公共日志
關于提高NOT日志記錄性能的一個不錯的技巧。

參考:在Tech for Enterprise博客上,從我們的JCG合作伙伴 Partho 重新獲得了日志記錄 。


翻譯自: https://www.javacodegeeks.com/2012/07/logback-logging-revisited.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/371743.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/371743.shtml
英文地址,請注明出處:http://en.pswp.cn/news/371743.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

eclipse 下使用git clone

方法一&#xff1a;eclipse安裝好git插件后&#xff0c;直接import-git-project from git- clone url-輸入github的網址等就可以了方法二&#xff1a;使用git軟件&#xff0c;到指定的目錄&#xff0c;右擊git bash here&#xff0c;git clone 加帶有網址的文件.git,如&#xf…

linux -unrar解壓縮

解壓縮命令unrar的使用&#xff1a; $unrar --help用法: unrar <command>-<switch 1> -<switchN> <archive><files...><listfiles...><path_to_extract\><命令>e 解壓文件到當前目錄l[t,b] 列出壓縮文檔信…

終極JPA查詢和技巧列表–第3部分

在閱讀第三部分之前&#xff0c;請記住本系列的第一部分和第二部分 JPA&#xff1a;通過查詢創建對象 JPA允許我們在查詢內創建對象&#xff0c;并帶有所需的值&#xff1a; package com.model;public class PersonDogAmountReport {private int dogAmount;private Person pe…

分治1--二分查找

分治1--二分查找 一、心得 二、題目和分析 三、代碼和結果 1 #include <iostream>2 using namespace std;3 int a[10]{1,2,4,5,7,8,9,10,13,20};4 5 6 //非遞歸 7 int find(int i){8 int l0,r9;9 int mid(lr)/2; 10 while(l<r){ 11 mid(lr)/2; 12…

隱式意圖啟動一個Activity

隱式意圖是通過指定一組動作或者屬性實現&#xff0c;主要用于跨應用使用。 1.創建一個意圖對象 Intent intent new Intent();2.設置意圖過濾器 intent.setAction("android.intent.action.testActivity"); //對應于action intent.addCategory("android.intent.…

Spring自定義命名空間

Spring自定義命名空間提供了一種很好的方式來簡化用于描述Spring應用程序上下文的bean定義的xml文件。 這是一個相當古老的概念&#xff0c;最初是在Spring 2.0中引入的&#xff0c;但值得不時地進行審查。 考慮一種情況&#xff0c;必須為沒有自定義名稱空間的Spring MVC應用程…

java二叉樹代碼_JAVA語言實現二叉樹生成的代碼教程

本文主要向大家介紹了JAVA語言實現二叉樹生成的代碼教程&#xff0c;通過具體的內容向大家展示&#xff0c;希望對大家學習JAVA語言有所幫助。給定某二叉樹三序遍歷中的兩個&#xff0c;我們即可以通過生成該二叉樹&#xff0c;并遍歷的方法&#xff0c;求出剩下的一序&#xf…

一個回到頂部的錨點

一般網站的右下角都會有一個回到頂部的錨點&#xff0c;但是在沒有學bootstrap的時候&#xff0c;我還是會想著用定位來做這個東西&#xff0c;但是現在用bootstrap來做的&#xff0c;所以將它記錄下來。 <!DOCTYPE html><html> <head><title>附加導航…

jquery jgrid filterToolBar beforeSearch 修改postData

beforeSearch: function() { var posted_data $("#mygrid").jqGrid(getGridParam,postData); posted_data ["testp"]"helloTest"; }轉載于:https://www.cnblogs.com/qiumingcheng/p/7141671.html

預告片:裸指關節SOA

我正在研究這個想法&#xff0c;但我不知道它是否對你們有吸引力。 我想就您是否需要進一步探討提出您的意見。 達成協議&#xff1a;我遇到過一些團隊&#xff0c;他們在使用SOA技術時由于其工具的復雜性而陷入泥潭。 我只在Java中看到過這種情況&#xff0c;但是我從一些C&am…

網頁轉圖片 java_java-網頁轉圖片

對比了網上常用的好幾種網頁轉圖片的開源插件&#xff0c;最后效果還不如使用原生的java直接寫來得好&#xff0c;上代碼&#xff0c;很簡單&#xff0c;中間需要考慮網頁加載延遲的問題&#xff0c;所以需要加上thread.sleep&#xff0c;休眠一下等待網頁加載完成了&#xff0…

開一個新坑吧

每天讀讀日志 給自己動力 開個新坑&#xff08;外星殖民&#xff09; 無聊時寫一寫 轉載于:https://www.cnblogs.com/dandansang/p/7143489.html

JMX和Spring –第1部分

這是三篇文章的第一篇&#xff0c;這三篇文章將展示如何通過JMX支持為Spring應用程序賦能。 Maven配置 這是用于設置此示例代碼的Maven pom.xml&#xff1a; <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSche…

maven exclude java_java – Maven:從shade插件中排除依賴項

我在mvn clean install之后看過下一個字符串Including com.sun.jersey.contribs:jersey-multipart:jar:1.5 in theshaded jar問題&#xff1a;即使我已經為maven-shade-plugin添加了exlusion,我也無法使它沒有陰影(參見下面的代碼)我的maven-shade-plugin&#xff1a;org.apach…

JMX和Spring –第3部分

本文是本系列的最后一篇。 看一下第1 部分和第2部分 。 在本系列的最后一篇文章中&#xff0c;我將展示如何在JDK中使用本機JMX支持來實現一種通知機制&#xff0c;該機制可以在HEAP內存超過特定閾值時向偵聽器發出警報。 正如我在上一篇文章中討論的那樣&#xff0c;這種方法…

QScrollArea不能顯示滾動條

轉載請注明出處&#xff1a;http://www.cnblogs.com/dachen408/p/7147141.html 問題&#xff1a;QScrollArea不能顯示滾動條 解決方案&#xff1a;設置QScrollArea->setWidgetResizeable&#xff08;false&#xff09;解決問題。 例子&#xff1a; ui.scrollArea->setWi…

java婚慶網站源碼_基于jsp的婚慶網站-JavaEE實現婚慶網站 - java項目源碼

基于jspservletpojomysql實現一個javaee/javaweb的婚慶網站, 該項目可用各類java課程設計大作業中, 婚慶網站的系統架構分為前后臺兩部分, 最終實現在線上進行婚慶網站各項功能,實現了諸如用戶管理, 登錄注冊, 權限管理等功能, 并實現對各類婚慶網站相關的實體進行管理。該婚慶…

JQuery實現的模塊交換動畫效果

<!doctype html> <html><head><meta http-equiv"content-type" content"text/html;charsetutf-8" /><title>JQuery實現的模塊交換動畫效果</title><meta name"Keywords" content"jquery&#xff0c…

CKD 實現

主要功能&#xff1a;1、新物料&#xff08;部品號&#xff09;的入庫管理 部品號的驗證、描述、品名、重量、單價等 2、部品號-供應商的核對 校驗部品號/供應商的對應情況、入庫、移除等 3、BOM清單的導入 基礎清單的導入 4、訂單 CKD套件管理 物料齊套管理 箱單管理 匯總 5、…

JMX和Spring –第2部分

這篇文章從本教程的第1部分繼續。 嗨&#xff0c;在我的前一篇文章中&#xff0c;我解釋了如何通過Spring設置JMX服務器以及如何通過身份驗證和授權保護對它的訪問。 在本文中&#xff0c;我將展示如何實現一個簡單的MBean&#xff0c;該MBean允許用戶在運行時更改Log4j記錄器…