日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Log配置教程及框架性能比較,看這篇就夠了!

本文轉(zhuǎn)載自微信公眾號「Java極客技術」,作者鴨血粉絲 。轉(zhuǎn)載本文請聯(lián)系Java極客技術公眾號。

一、摘要

不管是使用何種編程語言,何種框架,日志輸出幾乎無處不再,也是任何商業(yè)軟件中必不可少的一部分。

總結(jié)起來,日志的用途大致可以歸納成以下三種:

問題追蹤:通過日志不僅僅包括我們程序的一些bug,也可以在安裝配置時,通過日志可以發(fā)現(xiàn)問題。

狀態(tài)監(jiān)控:通過實時分析日志,可以監(jiān)控系統(tǒng)的運行狀態(tài),做到早發(fā)現(xiàn)問題、早處理問題。

安全審計:審計主要體現(xiàn)在安全上,通過對日志進行分析,可以發(fā)現(xiàn)是否存在非授權(quán)的操作。

以 Java 編程語言為例,打印日志的方式有很多,例如通過System.out.print()方法將關鍵信息輸出到控制臺,也可以通過 JDK 自帶的日志Logger類輸出,雖然 JDK 從1.4開始支持日志輸出,但是功能單一,無法更好的滿足商業(yè)要求,于是誕生了很多第三方日志庫,像我們所熟悉的主流框架log4j、log4j2、logback等,提供的 API 功能都遠勝 JDK 提供的Logger。

二、Log4j

2.1、介紹

Log4j 是一種非常流行的日志框架,由Ceki Gülcü首創(chuàng),之后將其開源貢獻給 Apache 軟件基金會。

Log4j 有三個主要的組件:Loggers(記錄器),Appenders (輸出源)和Layouts(布局)。這里可簡單理解為日志類別、日志要輸出的地方和日志以何種形式輸出。

綜合使用這三個組件可以輕松地記錄信息的類型和級別,并可以在運行時控制日志輸出的樣式和位置。

Log4j 的架構(gòu)大致如下:

當我們使用 Log4j 輸出一條日志時,Log4j 自動通過不同的Appender(輸出源)把同一條日志輸出到不同的目的地。例如:

  • console:輸出到屏幕;
  • file:輸出到文件;
  • socket:通過網(wǎng)絡輸出到遠程計算機;
  • jdbc:輸出到數(shù)據(jù)庫

在輸出日志的過程中,通過Filter來過濾哪些log需要被輸出,哪些log不需要被輸出。

在Loggers(記錄器)組件中,級別分五種:DEBUG、INFO、WARN、ERROR和FATAL。

這五個級別是有順序的,DEBUG < INFO < WARN < ERROR < FATAL,分別用來指定這條日志信息的重要程度,明白這一點很重要,Log4j有一個規(guī)則:只輸出級別不低于設定級別的日志信息。

假設Loggers級別設定為INFO,則INFO、WARN、ERROR和FATAL級別的日志信息都會輸出,而級別比INFO低的DEBUG則不會輸出。

最后,通過Layout來格式化日志信息,例如,自動添加日期、時間、方法名稱等信息。

具體輸出樣式配置,可以參考如下內(nèi)容Log4j2 - Layouts布局介紹

2.2、項目應用

以 Java 項目為例,在 Maven 的pom.xml中添加如下依賴!

2.2.1、添加 maven 依賴

 
 
 
 
  1.     
  2.         org.slf4j
  3.         slf4j-api
  4.         1.6.6
  5.     
  6.     
  7.         org.slf4j
  8.         slf4j-log4j12
  9.         1.6.6
  10.     
  11.     
  12.         log4j
  13.         log4j
  14.         1.2.17
  15.     

2.2.2、創(chuàng)建log4j配置

在實際應用中,要使Log4j在系統(tǒng)中運行須事先設定配置文件。

配置文件實際上也就是對Logger、Appender及Layout進行相應設定。

Log4j支持兩種配置文件格式,一種是XML格式的文件,一種是properties屬性文件,二選一。

創(chuàng)建一個log4j.xml或者log4j.properties,將其放入項目根目錄下。

1、XML格式

 
 
 
 
  1.     
  2.     
  3.         
  4.         
  5.         
  6.             
  7.             
  8.         
  9.     
  10.     
  11.     
  12.         
  13.         
  14.         
  15.         
  16.         
  17.         
  18.         
  19.             
  20.             
  21.         
  22.     
  23.     
  24.     
  25.         
  26.     
  27.     
  28.     
  29.     
  30.         
  31.         
  32.         
  33.     

2、XML格式

 
 
 
 
  1. log4j.rootLogger=INFO,M,C,E
  2. log4j.additivity.monitorLogger=false
  3. # INFO級別文件輸出配置
  4. log4j.appender.M=org.apache.log4j.DailyRollingFileAppender
  5. log4j.appender.M.File=/logs/info.log
  6. log4j.appender.M.ImmediateFlush=false
  7. log4j.appender.M.BufferedIO=true
  8. log4j.appender.M.BufferSize=16384
  9. log4j.appender.M.Append=true
  10. log4j.appender.M.Threshold=INFO
  11. log4j.appender.M.DatePattern='.'yyyy-MM-dd
  12. log4j.appender.M.layout=org.apache.log4j.PatternLayout
  13. log4j.appender.M.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} %p %l %m %n
  14. # ERROR級別文件輸出配置
  15. log4j.appender.E=org.apache.log4j.DailyRollingFileAppender
  16. log4j.appender.E.File=/logs/error.log
  17. log4j.appender.E.ImmediateFlush=true
  18. log4j.appender.E.Append=true
  19. log4j.appender.E.Threshold=ERROR
  20. log4j.appender.E.DatePattern='.'yyyy-MM-dd
  21. log4j.appender.E.layout=org.apache.log4j.PatternLayout
  22. log4j.appender.E.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} %p %l %m %n
  23. # 控制臺輸出配置
  24. log4j.appender.C=org.apache.log4j.ConsoleAppender
  25. log4j.appender.C.Threshold=INFO
  26. log4j.appender.C.layout=org.apache.log4j.PatternLayout
  27. log4j.appender.C.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p %l %m %n

2.2.3、log4j使用

在需要打印日志的類中,引入Logger類,在需要的地方打印即可!

 
 
 
 
  1. package org.example.log4j.service;
  2. import org.slf4j.Logger;
  3. import org.slf4j.LoggerFactory;
  4. public class LogPrintUtil {
  5.     /**log靜態(tài)常量*/
  6.     private static final Logger logger = LoggerFactory.getLogger(LogPrintUtil.class);
  7.     public static void main(String[] args){
  8.             logger.info("info信息");
  9.             logger.warn("warn信息");
  10.             logger.error("error信息");
  11.     }
  12. }

當然你還可以這樣寫

 
 
 
 
  1. if(logger.isInfoEnabled()) {
  2.     logger.info("info信息");
  3. }
  4. if(logger.isWarnEnabled()) {
  5.     logger.warn("warn信息");
  6. }

2.2.4、isInfoEnabled()有何作用呢?

簡單來說,在某些場景下,用isInfoEnabled()方法判斷下是能提升性能的!

例如我們打印這段內(nèi)容logger.info("User:" + userId + appId),程序在打印這行代碼時,先對內(nèi)容("User:" + userId + appId)進行字符串拼接,然后再輸出。

如果當前配置文件中日志輸出級別是info,是直接輸出的,當日志輸出級別是error時,logger.info()的內(nèi)容時不輸出的,但是我們卻進行了字符串拼接,如果加上if(logger.isInfoEnabled())進行一次判定,logger.info()就不會執(zhí)行,從而更好的提升性能,這個尤其是在高并發(fā)和復雜log打印情況下提升非常顯著。

另外,ERROR及其以上級別的log信息是一定會被輸出的,所以只有l(wèi)ogger.isDebugEnabled、logger.isInfoEnabled和logger.isWarnEnabled()方法,而沒有l(wèi)ogger.isErrorEnabled方法。

三、Log4j2

3.1、介紹

log4j2 是 log4j 1.x 的升級版,參考了 logback 的一些優(yōu)秀的設計,并且修復了一些問題,因此帶來了一些重大的提升,主要特點有:

  • 異常處理:在logback中,Appender中的異常不會被應用感知到,但是在log4j2中,提供了一些異常處理機制。
  • 性能提升, log4j2相較于log4j 1和logback都具有很明顯的性能提升,后面會有官方測試的數(shù)據(jù)。
  • 自動重載配置:參考了logback的設計,當然會提供自動刷新參數(shù)配置,最實用的就是我們在生產(chǎn)上可以動態(tài)的修改日志的級別而不需要重啟應用——那對監(jiān)控來說,是非常敏感的。
  • 無垃圾機制:log4j2在大部分情況下,都可以使用其設計的一套無垃圾機制,避免頻繁的日志收集導致的jvm gc。

3.2、項目應用

3.2.1、添加 maven 依賴

 
 
 
 
  1.     
  2.     
  3.         org.slf4j
  4.         slf4j-api
  5.         1.7.13
  6.     
  7.     
  8.     
  9.         org.slf4j
  10.         jcl-over-slf4j
  11.         1.7.13
  12.         runtime
  13.     
  14.     
  15.     
  16.         org.apache.logging.log4j
  17.         log4j-api
  18.         2.4.1
  19.     
  20.     
  21.         org.apache.logging.log4j
  22.         log4j-core
  23.         2.4.1
  24.     
  25.     
  26.     
  27.         org.apache.logging.log4j
  28.         log4j-slf4j-impl
  29.         2.4.1
  30.     
  31.     
  32.     
  33.         com.lmax
  34.         disruptor
  35.         3.2.0
  36.     

3.2.2、創(chuàng)建log4j2配置

在項目的根目錄下創(chuàng)建一個log4j2.xml的文件,與log4j相比,log4j2的異步輸出日志性能非常強勁,配置如下:

1、同步輸出日志

 
 
 
 
  1.     
  2.     
  3.         /logs/log4j2
  4.         /logs/log4j2/history
  5.     
  6.     
  7.         
  8.         
  9.         
  10.         
  11.         
  12.         
  13.             
  14.             
  15.         
  16.         
  17.         
  18.             
  19.             
  20.             
  21.             
  22.             
  23.                 
  24.                 
  25.                 
  26.             
  27.                
  28.             
  29.         
  30.         
  31.             
  32.             
  33.             
  34.                 
  35.                 
  36.             
  37.             
  38.         
  39.         
  40.             
  41.             
  42.             
  43.                 
  44.                 
  45.             
  46.             
  47.         
  48.     
  49.     
  50.     
  51.          
  52.         
  53.          
  54.         
  55.             
  56.         
  57.     

2、異步輸出日志

 
 
 
 
  1.     
  2.     
  3.         /logs/log4j2
  4.         /logs/log4j2/history
  5.     
  6.     
  7.         
  8.         
  9.         
  10.         
  11.         
  12.         
  13.             
  14.             
  15.         
  16.         
  17.         
  18.             
  19.             
  20.             
  21.             
  22.             
  23.                 
  24.                 
  25.                 
  26.             
  27.                
  28.             
  29.         
  30.         
  31.             
  32.             
  33.             
  34.                 
  35.                 
  36.             
  37.             
  38.         
  39.         
  40.             
  41.             
  42.             
  43.                 
  44.                 
  45.             
  46.             
  47.         
  48.     
  49.     
  50.     
  51.          
  52.         
  53.             
  54.             
  55.         
  56.          
  57.         
  58.     

詳細 API 可以參考官方網(wǎng)站!

3.2.3、log4j2使用

與 log4j 類似,直接在需要位置打印日志即可

 
 
 
 
  1. package org.example.log4j.service;
  2. import org.slf4j.Logger;
  3. import org.slf4j.LoggerFactory;
  4. public class LogPrintUtil {
  5.     /**log靜態(tài)常量*/
  6.     private static final Logger logger = LoggerFactory.getLogger(LogPrintUtil.class);
  7.     public static void main(String[] args){
  8.             logger.info("info信息");
  9.             logger.warn("warn信息");
  10.             logger.error("error信息");
  11.     }
  12. }

四、Logback

4.1、介紹

Logback 也是用 java 編寫一款非常熱門的日志開源框架,由 log4j 創(chuàng)始人寫的,性能比 log4j 要好!

logback 主要分為3個模塊:

  • logback-core:核心代碼模塊
  • logback-classic:log4j的一個改良版本,同時實現(xiàn)了slf4j的接口,這樣你如果之后要切換其他日志組件也是一件很容易的事
  • logback-access:訪問模塊與Servlet容器集成提供通過Http來訪問日志的功能

4.2、項目應用

4.2.1、添加 maven 依賴

 
 
 
 
  1.     ch.qos.logback
  2.     logback-classic
  3.     1.2.3
  4.     org.codehaus.janino
  5.     janino
  6.     2.7.8

4.2.2、創(chuàng)建logback配置文件

1、配置說明

logback在啟動的時候,會按照下面的順序加載配置文件:

  • 如果java程序啟動時指定了logback.configurationFile屬性,就用該屬性指定的配置文件。如java -Dlogback.configurationFile=/path/to/mylogback.xml Test,這樣執(zhí)行Test類的時候就會加載/path/to/mylogback.xml配置
  • 在classpath中查找logback.groovy文件
  • 在classpath中查找logback-test.xml文件
  • 在classpath中查找logback.xml文件
  • 如果是jdk6+,那么會調(diào)用ServiceLoader查找 com.qos.logback.classic.spi.Configurator接口的第一個實現(xiàn)類
  • 自動使用ch.qos.logback.classic.BasicConfigurator,在控制臺輸出日志

上面的順序表示優(yōu)先級,使用java -D配置的優(yōu)先級最高,只要獲取到配置后就不會再執(zhí)行下面的流程。相關代碼可以看ContextInitializer#autoConfig()方法。

2、同步輸出日志

 
 
 
 
  1.     
  2.     
  3.     
  4.     
  5.     
  6.     
  7.     
  8.     
  9.     
  10.       
  11.     
  12.     
  13.     
  14.     
  15.         value="%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{90} - %msg%n" />
  16.     
  17.     ${CONTEXT_NAME}
  18.     
  19.     
  20.         
  21.         
  22.             ${CUSTOM_LOG_PATTERN}
  23.             UTF-
    當前文章:Log配置教程及框架性能比較,看這篇就夠了!
    標題來源:http://www.dlmjj.cn/article/cdssggp.html