1. 程式人生 > >log4j日誌基本配置(感覺基礎真的很重要)

log4j日誌基本配置(感覺基礎真的很重要)

log4j日誌基本配置

  1. 在專案的classpath下或者resource包下(maven專案)新建一個log4j.properties檔案,初始專案配置如下引數就夠了
  2. 通過根日誌記錄器指定日誌級別及輸出源   日誌輸出的優先順序:  debug < info < warn < error < fatal 定義根日誌記錄器的日誌級別(info)及輸出源的別名(console,myFile) 該定義讓日誌在控制檯和檔案輸出,並且只輸出info級別以上的日誌 log4j.rootLogger=info,console,myFile

    #######配置輸出源console的具體實現為控制檯輸出####### #定義輸出源別名console(即根日誌記錄器定義的輸出源) #的實現類是ConsoleAppender(控制檯輸出源)log4j.appender.console=org.apache.log4j.ConsoleAppender  #指定日誌輸出格式的格式轉換器為PatternLayout實現類 log4j.appender.console.layout=org.apache.log4j.PatternLayout #定義日誌輸出的具體格式 log4j.appender.console.layout.ConversionPattern=%d %-5p [%c.%M()] - %m%n 

    #######配置輸出源myFile的具體實現為檔案輸出####### #定義輸出源別名myFile(即根日誌記錄器定義的輸出源) #的實現類是RollingFileAppender(檔案輸出源)log4j.appender.myFile=org.apache.log4j.RollingFileAppender #定義日誌檔案的儲存路徑 log4j.appender.myFile.File=src/log/logProperties/log4j.log #定義日誌檔案的大小 log4j.appender.myFile.MaxFileSize=1024kb #定義日誌檔案最多生成幾個(從0開始算1個,即此處最多3個檔案) #超過該大小則會覆蓋前面生成的檔案 log4j.appender.myFile.MaxBackupIndex=2 #指定日誌輸出格式的格式轉換器為PatternLayout實現類 log4j.appender.myFile.layout=org.apache.log4j.PatternLayout #定義日誌輸出的具體格式 log4j.appender.console.layout.ConversionPattern=%d %-5p [%c.%M()] - %m%n    #######輸出格式解釋####### #%d: 日誌列印的時間點,預設格式為ISO8601,也可以另外指定格式,          #定義如下:  %d{yyy年MM月dd日 HH時mm分ss秒SSS},則會輸出:          #2018年01月06日 14時47分45秒590 #%p: 輸出日誌級別,即DEBUG,INFO,WARN,ERROR,FATAL          #%-5p:表示字元小於5位,則字元居左(不加“-”號則字元居右),你可以舉一反三 #%c: 日誌所在類的全名 #%M: 日誌所在方法的名字 #%m: 日誌資訊 #%n: 輸出一個回車換行符 #%L: 輸出程式碼中的行號

  3.  debug:除錯,info:資訊,warn:警告,error:錯誤,fatal:致命錯誤
  4. 日誌級別配置
    
      日誌級別配置可分為3類,一類如上配置是配置父類日誌記錄器的日誌級別,第二類是配置子類日誌記錄器的日誌級別,第三類是配置輸出源(控制檯、檔案等)的日誌級別。他們的日誌級別解析優先順序由低到高排列:
        如果配置(也必須要配置)了父類日誌記錄器(rootLogger)的日誌級別(假設是INFO級別),沒有配置子類日誌記錄器的日誌級別,也沒有配置輸出源的日誌級別,則輸出源只能輸出INFO級別以上的;
        如果配置(也必須要配置)了父類日誌記錄器(rootLogger)的日誌級別(假設是INFO級別),配置了子類日誌記錄器的日誌級別(假設是DEBUG級別),沒有配置輸出源的日誌級別,則輸出源輸出DEBUG級別以上的;
        如果配置(也必須要配置)了父類日誌記錄器(rootLogger)的日誌級別(假設是INFO級別),配置了子類日誌記錄器的日誌級別(假設是DEBUG級別),配置了輸出源的日誌級別(假設是INFO級別),則輸出源輸出INFO級別以上的;
        如果配置(也必須要配置)了父類日誌記錄器(rootLogger)的日誌級別(假設是INFO級別),沒有配置子類日誌記錄器的日誌級別,配置了輸出源的日誌級別(假設是DEBUG級別),則輸出源輸出INFO級別以上的;
        因此,從上述的案例中我們可以知道日誌記錄器和輸出源輸出日誌級別存在2個邏輯關係:
        輸出源如果沒有定義日誌級別,它會繼承最接近它的子類日誌記錄器的日誌級別;子類日誌記錄器沒有定義日誌級別,它會繼承最接近它的父類日誌記錄器。
        列印日誌時輸出源會根據自身定義的日誌級別與最接近它的子類日誌記錄器定義的日誌級別比較,如果輸出源定義的級別高於子類日誌記錄器,則按輸出源定義的日誌級別輸出日誌,反之則按子類日誌記錄器的日誌級別輸出。
        所以在專案中可以按如下配置方式配置日誌級別:
    
    
    #控制父類日誌記錄器的日誌級別為info,預設所有模組下只輸出info級別以上的日誌
    log4j.rootLogger=info,console
    #單獨控制某個模組下的日誌級別為error,只有發生異常的時候才輸出日誌
    log4j.logger.log.logProperties=error
    #單獨控制某個類的日誌級別debug,方便輸出除錯資訊
    log4j.logger.log.logProperties.LogPropertiesTest=debug
    
    ############# 日誌輸出到控制檯 ############# 
    #日誌輸出到控制檯使用的api類  
    log4j.appender.console=org.apache.log4j.ConsoleAppender  
    #指定當前輸出源的日誌級別,有了前面的配置,就不需要配置該項了
    #log4j.appender.console.Threshold = info
    #指定日誌輸出的格式:靈活的格式
    log4j.appender.console.layout=org.apache.log4j.PatternLayout  
    #具體格式的內容
    log4j.appender.console.layout.ConversionPattern=%d %-2p [%c.%M()] - %m%n