log4j的使用


 日志的作用

  • 便於分析程序執行過程
  • 方便調試
  • 可以將業務數據存儲到文件、數據庫,有利於后期分析

 

 


 

 

log4j簡介

log4j是 Apache 的一個開源項目,通過設置日志級別來指定輸出哪些類型的日志。log4j功能強大:

  • 可以將日志信息輸出到控制台、文件、GUI 組件、甚至是數據庫中
  • 可以控制每一條日志的輸出格式

 

 


 

 

log4j的日志級別

log4j在 org.apache.log4j.Level 類中定義了七種日志級別,級別從高到低依次為:

  • OFF   最高日志級別,即關閉日志
  • FATAL  導致應用程序退出的錯誤
  • ERROR     運行發生錯誤,但仍不影響系統(程序)繼續運行
  • WARN    警告,即潛在的錯誤情形
  • INFO   一般用在粗粒度級別上,記錄程序全程執行過程,強調應用程序的運行全程
  • DEBUG   一般用於細粒度級別上,對調試應用程序非常有幫助
  • ALL    最低日志級別,記錄所有級別的日志

一般只使用4個級別,優先級從高到低為 ERROR > WARN > INFO > DEBUG。

 


 

 

log4j的組成

log4j 主要由三部分組成:

(1) Loggers (日志記錄器)    控制日志的輸出級別與日志是否輸出

 

(2)Appenders(輸出端) 指定日志的輸出到哪個地方(輸出到控制台、文件等),常用的輸出端:

  • ConsoleAppender   將日志輸出到控制台
  • FileAppender   將日志輸出到文件中
  • RollingFileAppender   將日志信息輸出到一個文件中,並指定文件尺寸,當文件大小達到指定尺寸時,會自動把文件改名,同時創建一個新的文件來保存日志
  • DailyRollingFileAppender   將日志輸出到文件中,會周期性輸出到一個新的文件
  • JDBCAppender   把日志信息保存到數據庫中

 

(3)Layout(日志格式化器),常用的格式化器類型:

  • HTMLLayout   格式化日志輸出為HTML表格形式
  • SimpleLayout   簡單的日志輸出格式化
  • PatternLayout   最強大的格式化器,可自定義日志輸出格式

 

 


 

 

log4j使用示例

(1)下載log4j,導入log4j.jar

注意是log4j,不是log4j2。

log4j的作者先開發了log4j,版本號以1開頭。后面對log4j進行重構,改進了log4j的不足,即log4j2,版本號以2開頭。log4j和log4j2的用法區別很大。

下載的log4j,有的版本含有log4j.jar、log4j-core.jar、log4j-api.jar3個jar包,我們只需導入log4j.jar。

 

 


 

 

(2)src下新建log4j的配置文件log4j.properties

### 日志記錄器Logger的全局設置 ###
#第一個參數指定輸出的最低日志級別,即只輸出該級別及以上級別的日志
#后面的參數指定要進行哪些配置
log4j.rootLogger = DEBUG,stdout,D,E


### 設置控制台輸出 ###
#stdout即standard out 標准輸出,默認為控制台,所以可將stdout換為Console
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
#指定標准輸出設備為系統輸出設備
log4j.appender.stdout.Target = System.out
#指定使用自定義的格式化器
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
#指定日志輸出格式
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n


### 輸出DEBUG及以上級別的日志到D:/logs/debug.log###
#配置時,輸出級別用首字母表示,D即DEBUG
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
#指定將日志輸出到哪個文件中
log4j.appender.D.File = D:/logs/debug.log
#指定文件寫入方式為追加
log4j.appender.D.Append = true
#指定最低輸出級別
log4j.appender.D.Threshold = DEBUG 
log4j.appender.D.DatePattern='.'yyyy-MM-dd-HH-mm
#指定日志輸出格式
log4j.appender.D.layout = org.apache.log4j.SimpleLayout 


### 輸出ERROR及以上級別的日志到D:/logs/error.log ###
log4j.appender.E = org.apache.log4j.RollingFileAppender
log4j.appender.E.File =D:/logs/error.log 
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR 
#指定日志文件的最大尺寸
log4j.appender.E.MaxFileSize = 2KB
#指定最大備份數為5
log4j.appender.E.MaxBackupIndex = 5
#指定日志輸出格式使用自定義格式
log4j.appender.E.layout = org.apache.log4j.PatternLayout
#指定日志格式
log4j.appender.E.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

此配置只是為了演示效果。

 

 


 

 

DailyRollingFileAppender 獨有的選項

DatePattern='.'yyyy-ww 

可選的值:

  • '.'yyyy-MM  每月
  • '.'yyyy-ww   每周
  • '.'yyyy-MM-dd  每天
  • '.'yyyy-MM-dd-a  每天兩次
  • '.'yyyy-MM-dd-HH  每小時
  • '.'yyyy-MM-dd-HH-mm  每分鍾

比如 '.'yyyy-MM-dd-HH-mm ,每分鍾都產生一個同名的新文件來保存這分鍾內的日志。

同名的新文件?就是在擴展名后加上時間,要查看需要改擴展名。

如果這分鍾內沒有日志輸出,則不新建文件。

 

 


 

 

RollingFileAppender獨有的選項

#指定日志文件的最大尺寸
MaxFileSize = 2KB
#指定最大備份數為5
MaxBackupIndex = 5

最初的文件是error.log,達到指定的最大尺寸后,把這個文件重命名為error.log.1(擴展名后面加索引),再新建一個error.log來保存日志。

error.log達到最大尺寸后,把error.log.1重命名為error.log.2,把error.log重命名為error.log.1,再新建一個error.log來保存日志

.......

最多可有5個備份(1,2,3,4,5)。

有了5個備份,如果error.log達到了最大尺寸,把error.log.5刪除,將error.log.4重命名為error.log.5,error.log.3重命名為error.log.4......error.log重命名為error.log.1,再新建一個error.log來保存日志。

 

 

 


 

 

日志輸出格式

  • HTMLLayout    

將日志以html代碼的形式輸出到指定文件中,將文件擴展名修改為.html即可查看效果:

 

  • SimpleLayout 

級別 - 日志信息    

DEBUG - This is debug message.
INFO - This is info message.
ERROR - This is error message.

 

 

 

  • PatternLayout 

自定義格式,和 C 語言的 printf() 差不多,都是使用占位符:

%m   代碼中指定的日志信息

%p    日志級別,DEBUG、INFO 等

%n    換行符

%c    打印語句所屬的類的全名

%t     產生該日志的線程全名

%d    服務器當前時間,可在后面指定格式,比如   %d{yyyy年MM月dd日 HH:mm:ss}

%l     日志時間發生的位置,包括類名、發生的線程,以及在代碼中的行數,如:Test.main(Test.java:10)

%F    日志消息產生時所在文件的文件名

%L    代碼所在行號

%%   輸出一個 %

 

可指定寬度、對齊方式:

%5p    寬度是5,字符個數小於5時,默認右對齊
%-5p   寬度是5,字符個數小於5時,左對齊

 

 


 

 

(3)src下新建測試類test.Log4jTest

package test;

import org.apache.log4j.Logger;

public class Log4jTest {
    public static void main(String[] args) {
        // 獲取當前類的Logger
        Logger logger = Logger.getLogger(Log4jTest.class);

        // 輸出DEBUG級別的日志,參數為日志信息
        logger.debug("This is debug message.");
        // 輸出INFO級別的日志
        logger.info("This is info message.");
        // 輸出ERROR級別的日志
        logger.error("This is error message.");
    }
}

 

 


 

 

說明

log4j可單獨使用,單獨使用時只需添加log4j.jar包。

如果要在其他框架中使用log4j,一般還要下載添加apache的commons-logging.jar。

因為log4j實現了記錄日志的功能,commons-logging.jar定義了日志接口,commons-logging本身並不具備記錄日志的功能,二者的關系是接口-實現類的關系,引入commons-logging.jar,使得框架與日志的耦合從類降到了接口。

 

log4j的配置文件必須名為log4j.properties或log4j.xml,且必須放在資源根目錄下(src是默認的資源根目錄)。

 

 


 

 

附   log4j常用配置

### 日志記錄器Logger的全局設置 ###
#日志輸出的最低級別設置為DEBUG
log4j.rootLogger = DEBUG,stdout,D,E


### 設置日志的控制台輸出 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
#如果想查看程序的具體執行過程(在控制台輸出DEBUG級的日志),把下面一行代碼注釋掉或把ERROR改為DEBUG即可
log4j.appender.stdout.Threshold = ERROR
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n


### 輸出日志到文件 ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File =D://log/debug/debug.log 
log4j.appender.D.Append = true
#如果想把DEBUG級的日志輸出到文件,把下面一行注釋掉或把ERROR改為DEBUG即可
log4j.appender.D.Threshold = ERROR
log4j.appender.D.DatePattern='.'yyyy-ww
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM