APACHE LOG4J? 2

來源:互聯網
上載者:User

標籤:style   blog   http   color   使用   java   strong   sp   檔案   

最近服務端開發需要用Log系統,於是研究了下APACHE下的Log架構。

 

目前日誌系統,支援的語言有C++,PHP,.NET,JAVA。當然我是用Java服務端,選擇用log4j吧。但突然發現log4j 2比較有趣,官網也提到效能上有比1.X有更大的提升,關於log4j的文章網上有很多了。

那麼我們就來學習下log4j 2吧。

至於個人的選擇,我有時候不太喜歡使用調試器。原因之一是因為它複雜資料結構和控制流程程的細節需要讓我去思考;特別是單步跟蹤更麻煩,點擊語句和思考花費的時間耗費更多。

如果用輸出的話,則需要較少的時間來決定在哪裡把列印語句,而不是去思考單步代碼的關鍵區段和使用快速鍵去單步調試。更重要的是,調試語句留在程式中;偵錯工作階段是短暫的。

Logging確實有它的缺點。它可以使應用程式變得更慢。如果太詳細,可能會導致滾動越界,而看不到全部的。為了減輕這些影響,log4j被設計為是可靠的,快速的和可擴充的

LOG4J™ 2
log4j的1.x中已被廣泛採用並在許多應用中使用。然而,經過多年的發展上有所放緩。由於其需要嚴格遵守非常老版本的Java,它變得更難以維持。其辦法,SLF4J/ Logback向架構許多需要改進。那麼,為什麼有Log4j 2呢?這裡有幾個原因。

1.Log4j 2被設計作為審計日誌架構。Log4j1.x和Logback在失去events 時而重新設定。 Log4j 2不會。在Logback的Appenders中異常應用程式中是絕對看不到的。在Log4j 2中Appenders可以被配置為允許異常滲到應用

2.Log4j 2包含LMAX Disruptor庫基礎上的下一代無鎖非同步Loggers 。在多線程情況下非同步Loggers 具有10倍的輸送量和比Log4j1.x和Logback幅度更低的延遲。

3.Log4j 2採用了外掛程式系統,添加新的Appenders, Filters, Layouts, Lookups, 和Pattern Converters更加容易。

4.由於外掛程式的系統配置簡單。Entries 配置中不需要指的類名。

5.支援Message對象。Message允許的有趣和複雜的結構支援,通過日誌系統傳遞有效地操作。使用者可以自由建立自己的訊息類型和編寫自訂的 Layouts, Filters ,Lookups並操作他們。

6.Log4j的1.x的支援上的Appender的過濾器。 Logback加入TurboFilters允許由一個Logger處理的事件之前進行過濾。Log4j 2支援可配置為由一個Logger處理之前處理事件,因為它們是由一個Logger或Appenders處理。 

7.許多Logback的Appender不接受Layouts,並且只發送資料的固定格式。大多數的Log4j 2Appenders接受Layouts,允許資料在所需的任何格式來傳送。

8.在Log4j的1.x和Logback布局返回一個String。這導致了在Logback編碼器討論的問題。 Log4j 2採用了更簡單的方法,布局總是返回一個位元組數組。這具有它意味著他們可以在幾乎任何追加程式被使用,而不是僅寫入到OutputStream的優點。 

9.系統日誌的Appender同時支援TCP和UDP以及支援BSD的系統日誌和RFC5424格式。 

10.Log4j的2利用了Java 5的並發支援的優勢,進行以儘可能低的水平鎖定。 Log4j的1.x中已經知道死結問題。其中許多是固定的Logback但許多Logback類仍然需要在相當高的水平同步。

 

架構

 

Logger

Loggers 通過調用LogManager.getLogger建立。該Logger本身不執行任何直接的動作。它只是一個名字,並和LoggerConfig有關。它擴充AbstractLogger並實現所需的方法。通過配置修改Logger可以和不同LoggerConfig關聯的,從而導致需要修改其行為。

調用LogManager.getLogger方法具有相同的名字總是會返回一個引用完全相同的Logger對象。

例如,在

Logger X = LogManager.getLogger(“jy02432443”); Logger Y = LogManager.getLogger(“jy02432443”); 

x和y是指完全相同的Logger對象,可以用==。

log4j的環境配置通常是在應用程式初始化的時候。首選的方法是通過讀取設定檔。這個在配置章節已經討論過了。

Log4j中可以很容易地為Logger軟體組件命名。這可以通過在每類中執行個體化一個Logger,與Logger名稱相同的類的完全限定名來完成(如tl.lan或org.lan)。這是定義Logger的有效和直接的方法。

作為日誌輸出帶有產生日誌Logger的名字,這個命名策略可以很容易地識別出日誌資訊的來源。 Log4j的不限制儘可能多的Logger。開發人員可以自由根據需要來命名Logger。

一般用類的名字命名Logger比較常見,方便的方法LogManager.getLogger(Object.class)設定為自動使用調用類的完全限定類名作為Logger的名字。

該類它們所在的位置來命名Logger似乎是目前已知的最好的策略。

 

APACHE LOG4J? 2

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.