Java日志混亂

每個應用程序都需要記錄日志。 現在,對于在Java中確切使用什么有很多選擇。 最著名的框架是:log4j,logback,commons-logging,slf4j,java.util.logging。 還有更多的東西–時不時有人決定編寫自己的記錄器–只需轉到IDE的“打開類型”對話框并鍵入“記錄器”(更不用說有些人使用名稱“ Log”)。 還有ServletContext.log(..)和類似的東西。 確實是一團糟。 但是,讓我們從一些歷史開始(注意:這是該主題的另一篇文章 )。

首先是System.out和System.err。 但是它們不靈活,因此就需要功能豐富的日志記錄(請注意,當時我在上小學)。 可以定制格式記錄的日志,可以記錄到多個目標(文件,控制臺,電子郵件等)。因此log4j出現在1999年 。

但是也產生了其他解決方案,包括java.util.logging –嘗試使用標準JDK日志記錄。 事實證明,這是一次非常成功的嘗試。 java.util.logging于2002年初與JDK 1.4一起出現。幾個月后,由于意識到所有現有記錄器都需要一個通用日志記錄接口,導致apache common-logging 。

Commons Logging的想法是可行的–庫不應在使用它們的應用程序上強制執行特定的日志記錄實現。 因此,每個日志記錄實現都適應于庫使用的通用API –因此您的庫不使用org.apache.log4j.Logger –它使用org.apache.commons.logging.Log,并將其委托給任何日志記錄框架存在于類路徑上。 這樣,您的項目可以使用多個庫,并對所有庫使用單個日志記錄配置。

但是公共記錄不足。 人們說它造成的問題多于解決的問題。 所以的log4j的作者- CekiGülcü SLF4J(簡單記錄門面為Java) -創建了一個新的項目在2005年 。 它旨在成為更好的公共記錄。

Log4j自1999年以來已被廣泛使用,但是它還不夠好,所以請猜測誰創建了一個新項目– logback。 再次是CekiGülcü。 為什么要一個新項目? 好吧,我想是出于政治原因和需要從頭開始替換的舊代碼庫的結合。 無論如何,logback出現在2006年。它比log4j好嗎? 塞基在這里解釋 。

所以回到今天-有很多日志記錄框架和兩個外觀-commons-logging和slf4j。 每個庫都使用不同的庫,而且情況一團糟。 版本不匹配,類路徑上有大量Logger類。 Maven通過至少不允許同一日志記錄實現的多個版本而成功地簡化了這一過程,僅此而已。 而且,如果您不了解上面的所有歷史記錄以及哪個框架用于什么,那么您的項目很可能會遭受這種混亂。

有什么解決方案? 最簡單的方法是使用slf4j和logback。 為什么?

  • slf4j具有許多現有實現的橋梁。 這意味著您將刪除log4j.jar并使用log4j-over-slf4j.jar –它在同一軟件包中具有相同的類,只是實現有所不同–它委托使用中的當前slf4j實現。 這樣,所有使用log4j(或任何其他橋接實現)的庫都將與您的logback配置一起使用。 不幸的是,這在java.util.logging中不能很好地工作,因此您必須希望不要有太多的庫決定“最小的依賴范圍”。
  • logback優于log4j(相同作者-較新的實現,從以前的錯誤中學習)
  • 如果出現了比登錄更好的框架,則可以輕松切換到該框架而無需更改類。

最后,介紹一下日志記錄配置。 它應該在外部,以與其他外部化項目配置相同的方式(最好在相同的位置)。 然后,您應該基于系統的“ config.location”屬性加載它。

(在基于Spring的Web應用程序中,有Log4jWebConfigurer ,但沒有LogbackWebConfigurer 。幸運的是,它很容易編寫,并且有一些基于log4j的現有實現。在web.xml中, logbackConfigLocation參數應該是: file://${config.lotation}/logback.xml

為什么這么簡單的事情變得如此復雜? 因為這并不簡單。 最初沒有考慮太多因素,因此需要在以后進行糾正。 自2006年以來該領域未發生重大變化是一件好事,因此我們可以認為情況保持穩定。

參考: Bozho的技術博客上來自我們的JCG合作伙伴 Bozhidar Bozhanov的 The Logging Mess 。

相關文章 :

  • 正確記錄應用程序的10個技巧
  • 每個程序員都應該知道的事情
  • Java教程和Android教程列表
  • 如何解決生產問題
  • 每個程序員或架構師都應該知道的9 + 7件事

翻譯自: https://www.javacodegeeks.com/2011/09/java-logging-mess.html

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

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

相關文章

Cocos2d-x 3.2 Lua演示樣例FontTest(字體測試)

Cocos2d-x 3.2 Lua演示樣例FontTest(字體測試)本篇博客介紹Cocos2d-x 3.2中Lua測試項目中的FontTest樣例,主要使用了字體文件來創建我們想要的字體樣式:第一個參數為文本。第二參數為ttf字體文件,第三個參數為字體大小…

CSDN挑戰編程——《絕對值最小》

絕對值最小 題目詳情: 給你一個數組A[n],請你計算出ansmin(|A[i]A[j]|)(0<i,j<n). 例如&#xff1a;A{1&#xff0c; 4&#xff0c; -3}&#xff0c; 則&#xff1a; |A[0] A[0]| |1 1| 2. |A[0] A[1]| |1 4| 5. |A[0] A[2]| |1 (-3)| 2. |A[1] A[1]| |4 …

linux上安裝memcached步驟

libevent: http://libevent.org/ 服務器端&#xff1a;https://code.google.com/archive/p/memcached/downloads 客戶端&#xff1a; http://pecl.php.net/package/memcache 和 http://pecl.php.net/package/memcached 二選一 http://chenzhou123520.iteye.com/blog/1…

IPC之SystemV

svipc - System V interprocess communication mechanisms linux實現的System V interprocess communication (IPC)機制包含消息隊列&#xff08;message queues&#xff09;&#xff0c;信號集&#xff08;semaphore sets&#xff09;&#xff0c;和共享內存&#xff08;share…

oracle create user

sqlplus /nolog conn sys/pw123456orcl as sysdba CREATE USER zengwenfeng IDENTIFIED BY zengwenfeng ; GRANT ALL PRIVILEGES TO zengwenfeng ; COMMIT; C:\Users\Administrator>sqlplus /nologSQL*Plus: Release 11.2.0.1.0 Production on 星期日 12月 24 21:38:24 20…

具有GlassFish和一致性的高性能JPA –第2部分

在我的四部分系列的第二部分中&#xff0c;我將解釋將Coherence與EclipseLink和GlassFish一起使用的策略第一。這描述了配置Coherence的JPA支持的Cache所必須采取的步驟&#xff0c;以及如何在GlassFish中使用它。高性能數據存儲。 一般的做法 您可以將Coherence API與通過JPA映…

arm板telnetd為什么運行不了_一種基于ARM的嵌入式系統開發的方案詳細講解

背景介紹在日益信息化的社會中&#xff0c;各種各樣的嵌入式系統已經全面滲透到日常生活的每一個角落。嵌入式系統的功能越來越復雜&#xff0c;這就使得一個嵌入式系統產品從市場需求立項到方案選擇、樣機研制、定型量產所需要的開發費用越來越多&#xff0c;所需開發時間越來…

反素數 -- 數學

反素數就是區間內約數個數最多的那個數。 在ACM題目里&#xff0c; 一般是求約數最多而且數字最小的那個數&#xff0c;【1--n】 二是求約數剛好等于n的最小的那個數 三是求區間里的最小反素數【beign&#xff0c;end】 1和3有區別嗎&#xff1f;有&#xff0c;1可以加速&#…

編程挑戰系統的輸入和輸出詳細說明

在高校俱樂部線上編程挑戰中&#xff0c;一道題目的所有測試數據是放在一個文本文件中&#xff0c;選手將一道題目的程序提交給評判系統運行&#xff0c;程序從該文件中讀取測試數據&#xff0c;再把運行結果輸出到另一個文本文件中。系統把輸出文件與標準答案比對&#xff0c;…

上傳文件---未能找到路徑“D:\MyProject\Files\”的一部分

C# 使用控件FileUpload 上傳文件&#xff0c;簡單實例&#xff1a; protected void btnUpload_Click(object sender, EventArgs e){string path Server.MapPath("~/Files/");if (fileUpload.HasFile true){string filename fileUpload.FileName.ToLower();fileUpl…

使用SPANN方式將Spring&Quartz與自定義注釋集成

在上一篇文章中 &#xff0c;我們演示了如何在Spring容器中創建和配置帶批注的Quartz作業。 我們使用了一個類級別的注釋將一些元數據添加到實現Quartz Job的bean中。 批注定義了作業的名稱&#xff0c;組及其cron表達式。 后來&#xff0c;大部分代碼專用于處理該批注&#xf…

python opencv旋轉_Python opencv實現與rotatedrect類似的矩形旋轉,pythonopencv,RotatedRect

本文原理&#xff1a;先旋轉矩形到指定角度&#xff0c;然后提取矩形外輪廓&#xff0c;從而獲取旋轉后的矩形坐標點。#&#xff01;/usr/bin/env python3# -*- coding: utf-8 -*-# Author: tcy# Date: 2020-5-2 21:00:53# Version:V1.01# Last Modified by: tcy shanghai song…

關于string轉整數

又是leetcode的easy級別題&#xff0c;很基本的題目&#xff0c;卻漏考慮很多情況&#xff0c;動手前一定要考慮清楚呀&#xff01;&#xff01;&#xff01; 就當做鍛煉寫作能力吧&#xff0c;先上題目&#xff01; 將文本轉換成整數&#xff0c;注意一下幾點&#xff1a; 1.文…

數字三角形——遞歸、遞推、記憶化搜索

數字三角形 描述: 有一個由非負整數組成的三角形&#xff0c;第一行只有一個數&#xff0c;除了最下行之外每個數的左下方和右下方各有一個數。 問題&#xff1a; 從第一行的數開始&#xff0c;每次可以往左下或右下走一格&#xff0c;直到走到最下行…

Java 7功能概述

前面我們討論了所有未納入Java 7的內容&#xff0c;然后回顧了將其納入Java 7的有用的Fork / Join框架 。 今天的帖子將帶我們了解Project Coin的每個功能-一系列小的語言增強功能&#xff0c;這些功能雖然不是開創性的&#xff0c;但是對于任何能夠使用JDK 7的開發人員來說都是…

緩存技術

提升系統性能的主要方式之一就是緩存。它可以擋掉大部分的數據庫訪問的沖擊&#xff0c;如果沒有它&#xff0c;系統很可能會因為數據庫不可用導致整個系統崩潰。 但是緩存帶來了另外一些棘手的問題&#xff1a; 數據的一致性和實時性。 例如&#xff0c;數據庫中的數據狀態已經…

水晶報表分組分欄_web報表可視化設計器工具推薦

古往今來&#xff0c;信息就是決勝的關鍵。在科技時代的今天亦是如此。企業的數據管理在幫助企業加強管控、提高競爭力等方面具有不可或缺的作用。這就不得不說到報表工具。企業想要將儲存于各種商業信息系統中的數據轉化成有用的信息&#xff0c;最終幫助決策者做出更快、更好…

嵌套矩形——DAG上的動態規劃

有向無環圖&#xff08;DAG,Directed Acyclic Graph&#xff09;上的動態規劃是學習動態規劃的基礎。很多問題都可以轉化為DAG上的最長路、最短路或路徑計數問題。 題目描述&#xff1a; 有n個矩形&#xff0c;每個矩形可以用兩個整數a,b描述&#xff0c;表示它的長和寬。矩形…

Twisted

Twisted定義Twisted是一個基于事件驅動的網絡引擎框架網絡框架&#xff0c;別人預先定義好的一個框架&#xff08;一個項目&#xff09;&#xff0c;如.net某個web框架有25個class&#xff0c;從BeginRequest依次執行類里的process方法&#xff0c;程序員自己定義一個類&#x…

從Spring到Java EE 6

我最近在一個非常復雜的項目中工作&#xff0c;其中融合了許多Java EE 6技術&#xff08;例如JPA&#xff0c;JAXB&#xff0c;JMS&#xff0c;JTA&#xff0c;JAX-RS等&#xff09;。 出于生產力和計劃方面的原因&#xff0c;將原型應用程序設計為獨立的純Spring應用程序。 當…