當前位置:編程學習大全網 - 源碼下載 - Log4j2簡介和異步日誌梳理

Log4j2簡介和異步日誌梳理

log4j2是log4j 1.x 的升級版,參考了logback的壹些優秀的設計,並且修復了壹些問題,因此帶來了壹些重大的提升,主要有:

之前看官方文檔摘抄了壹些概念,這裏懶得翻譯了,使用log4j的都應該清楚,這裏只是mark下。

log4j2最大的特點就是異步日誌,其性能的提升主要也是從異步日誌中受益,我們來看看如何使用log4j2的異步日誌。

Log4j2提供了兩種實現日誌的方式,壹個是通過AsyncAppender,壹個是通過AsyncLogger,分別對應前面我們說的Appender組件和Logger組件。註意這是兩種不同的實現方式,在設計和源碼上都是不同的體現。

AsyncAppender是通過引用別的Appender來實現的,當有日誌事件到達時,會開啟另外壹個線程來處理它們。需要註意的是,如果在Appender的時候出現異常,對應用來說是無法感知的。 AsyncAppender應該在它引用的Appender之後配置,默認使用 java.util.concurrent.ArrayBlockingQueue實現而不需要其它外部的類庫。 當使用此Appender的時候,在多線程的環境下需要註意,阻塞隊列容易受到鎖爭用的影響,這可能會對性能產生影響。這時候,我們應該考慮使用無所的異步記錄器(AsyncLogger)。

AsyncAppender有壹些配置項,如下:

除此之外還有壹些其他的細節,如果感興趣可以參考官網文檔,這裏就不壹壹列舉了。

AsyncLogger才是log4j2 的重頭戲,也是官方推薦的異步方式。它可以使得調用Logger.log返回的更快。妳可以有兩種選擇:全局異步和混合異步。

全局異步

配置文件不用動:

在系統初始化的時候,增加全局參數配置:

妳可以在妳第壹次獲取Logger之前設置,也可以加載JVM啟動參數裏,類似

混合異步

混合異步只需要修改配置文件即可:

在上面示例的配置中,root logger就是同步的,但是com.foo.Bar的logger就是異步的。

在使用異步日誌的時候需要註意壹些事項,如下:

4、如果不是確實需要,不要打印location信息,比如HTML的location,或者pattern模式裏的%C or $class, %F or %file, %l or %location, %L or %line, %M or %method, 等,因為Log4j需要在打印日誌的時候做壹次棧的快照才能獲取這些信息,這對於性能來說是個極大的損耗。

關於性能測試,大家可以直奔官網,哪裏有很詳細的數據,這裏給個圖:

雖然我測下來,在immediateFlush設置為false的情況下,同步異步差不了多少,但可能是我的測試條件不符合官方的,從設計和原理上來說,異步日誌,無疑是個最優的選擇。

總的來說,看了壹遍log4j的官網文檔,對日誌系統有了個比較全面的了解,以前只是copy配置來改改,沒關註過很多細節,這次算是掃盲了壹次。文章也只是做了個介紹,在實際使用中,還是要細細研究下配置。

另外,個人覺得異步模式無非就是在原來同步寫盤的前提下,增加消息隊列作為緩存,或者交個另壹個線程去做,這理論上除了帶來壹些額外的,較小的cpu和內存的開銷,應該會在高流量的時候帶來不小的性能提升,對比下來,log4j2無疑是當下最值得使用的日誌組件來,且可以使用其異步模式。

當然了,也不能說異步就壹定好,如果日誌的流量不是特別大,磁盤性能又跟得上,沒有必要壹定使用異步日誌。

  • 上一篇:什麽是軟件的二次開發?
  • 下一篇:做壹個這樣的購物APP多少錢
  • copyright 2024編程學習大全網