1.   log4j 的配置文件

Log4j 支持兩種配置文件格式,一種是 XML 格式的文件,一種是 Java 特性文件 lg4j.properties (鍵 = 值)。

1.1. log4j configuration scripts in properties format

lg4j.properties 文件作為作為常用的配置文件的方法如下:

Ø         配置根 Logger
Logger 負責處理日志記錄的大部分操作。
其語法為:
log4j.rootLogger = [ level ] , appenderName, appenderName, …
    其中, level 是日志記錄的優先級,分為 OFF 、 FATAL 、 ERROR 、 WARN 、 INFO 、 DEBUG 、 ALL 或者自定義的級別。 Log4j 建議只使用四個級別,優先級從高到低分別是 ERROR 、 WARN 、 INFO 、 DEBUG 。通過在這里定義的級別,您可以控制到應用程序中相應級別的日志信息的開關。比如在這里定義了 INFO 級別,只有等于及高于這個級別的才進行處理,則應用程序中所有 DEBUG 級別的日志信息將不被打印出來。 ALL: 打印所有的日志, OFF :關閉所有的日志輸出。 appenderName 就是指定日志信息輸出到哪個地方。可同時指定多個輸出目的地。

Ø         Appender

配置日志信息輸出目的地 Appender 負責控制日志記錄操作的輸出。
其語法為:
log4j.appender.appenderName = fully.qualified.name.of.appender.class
log4j.appender.appenderName.option1 = value1
log4j.appender.appenderName.optionN = valueN

其中, Log4j 提供的 appender 有以下幾種:
org.apache.log4j.ConsoleAppender (控制臺),
org.apache.log4j.FileAppender (文件),
org.apache.log4j.DailyRollingFileAppender (每天產生一個日志文件),
org.apache.log4j.RollingFileAppender (文件大小到達指定尺寸的時候產生一個新的文件),可通過 log4j.appender.R.MaxFileSize=100KB 設置文件大小,還可通過 log4j.appender.R.MaxBackupIndex=1 設置為保存一個備份文件。
org.apache.log4j.WriterAppender (將日志信息以流格式發送到任意指定的地方)
例:

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
定義一個名為 stdout 的輸出目的地, ConsoleAppender 為控制臺。

Ø         Layout

其中, Log4j 提供的 layout 有以下幾種:
org.apache.log4j.HTMLLayout (以 HTML 表格形式布局),
org.apache.log4j.PatternLayout (可以靈活地指定布局模式),
org.apache.log4j.SimpleLayout (包含日志信息的級別和信息字符串),
org.apache.log4j.TTCCLayout (包含日志產生的時間、線程、類別等等信息)

Ø         格式化日志信息
Log4J 采用類似 C 語言中的 printf 函數的打印格式格式化日志信息,打印參數如下:
%m 輸出代碼中指定的消息
%p 輸出優先級,即 DEBUG , INFO , WARN , ERROR , FATAL
%r 輸出自應用啟動到輸出該 log 信息耗費的毫秒數
%c 輸出所屬的類目,通常就是所在類的全名
%t 輸出產生該日志事件的線程名
%n 輸出一個回車換行符, Windows 平臺為 “rn” , Unix 平臺為 “n”
%d 輸出日志時間點的日期或時間,默認格式為 ISO8601 ,也可以在其后指定格式,比如: %d{yyyy MMM dd HH:mm:ss,SSS} ,輸出類似: 2002 年 10 月 18 日 22 : 10 : 28 , 921
%l 輸出日志事件的發生位置,包括類目名、發生的線程,以及在代碼中的行數。

 

log4j.propertie 示例文件:

log4j.rootCategory=INFO, stdout,file

###. 定義名為 stdout 的輸出端的類型
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[QC] %p [%t] %C.%M(%L) | %m%n

 

###. 定義名為 file 的輸出端的類型為每天產生一個日志文件。
log4j.appender.file =org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.File=log.txt
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d-[TS] %p %t %c - %m%n

 

###. 指定 com.neusoft 包下的所有類的等級為 DEBUG 。可以把 com.neusoft 改為自己項目所用的包名。
log4j.logger.com.neusoft=DEBUG

###. 如果項目中沒有配置 EHCache ,則配置以下兩句為 ERROR 。
log4j.logger.com.opensymphony.oscache=ERROR
log4j.logger.net.sf.navigator=ERROR

### struts 配置
log4j.logger.org.apache.commons=ERROR

log4j.logger.org.apache.struts=WARN

### displaytag 配置
log4j.logger.org.displaytag=ERROR

### .spring 配置
log4j.logger.org.springframework=DEBUG

### . ibatis 配置
log4j.logger.com.ibatis.db=WARN
### . hibernate 配置

log4j.logger.org.hibernate=DEBUG

log4j.logger.org.apache.velocity=FATAL
log4j.logger.com.canoo.webtest=WARN

 

1.2. log4j configuration scripts in XML format

<?xml version="1.0" encoding="GB2312" ?>

<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

<appender name="org.zblog.all" class="org.apache.log4j.RollingFileAppender">

<!-- 設置通道 ID:org.zblog.all 和輸出方式: org.apache.log4j.RollingFileAppender -->

<param name="File" value="all.output.log" />

<!-- 設置 File 參數:日志輸出文件名 -->

<param name="Append" value="false" />

<!-- 設置是否在重新啟動服務時,在原有日志的基礎添加新日志 -->

   <param name="MaxBackupIndex" value="10" />

   <layout class="org.apache.log4j.PatternLayout">

       <param name="ConversionPattern" value="%p (%c:%L)- %m%n" />

<!-- 設置輸出文件項目和格式 -->

   </layout>

</appender>

<appender name="org.zblog.zcw" class="org.apache.log4j.RollingFileAppender">

   <param name="File" value="output.log" />

   <param name="Append" value="true" />

   <param name="MaxFileSize" value="10240" />

<!-- 設置文件大小 -->

   <param name="MaxBackupIndex" value="10" />

   <layout class="org.apache.log4j.PatternLayout">

   <param name="ConversionPattern" value="%p (%c:%L)- %m%n" />

   </layout>

</appender>

<logger name="zcw.log">

<!-- 設置域名限制,即 zcw.log 域及以下的日志均輸出到下面對應的通道中 -->

   <level value="debug" />

<!-- 設置級別 -->

   <appender-ref ref="org.zblog.zcw" />

<!-- 與前面的通道 id 相對應 -->

</logger>

<root>

<!-- 設置接收所有輸出的通道 -->

   <appender-ref ref="org.zblog.all" />

<!-- 與前面的通道 id 相對應 -->

</root>

</log4j:configuration>

 

2.   log4j in java

2.1. commongs-logging+Log4j

Ø         導入所有需的 commongs-logging 類:
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

 

Ø         獲取日志記錄器

在自己的類中定義一個 org.apache.commons.logging.Log 類的私有靜態類成員:
private final Log log = LogFactory.getLog(getClass());
LogFactory.getLog() 方法的參數使用的是當前類的 class 。

 

Ø         輸出日志信息

使用 org.apache.commons.logging.Log 類的成員方法輸出日志信息:


if (log.isDebugEnabled()) {

   log.debug("debug…");

 }
if (log.isInfoEnabled()){
   log.info("Info…");
}
if (log.isWarnEnabled()){
   log.warn("warn …");
}
if (log.isErrorEnabled()){
   log.error("error …");

}
if (log.isFatalEnabled()){
   log.fatal("fatal …")
}

2.2. 單獨使用 Log4j

Ø         獲取日志記錄器

得到記錄器使用 Log4j ,這個記錄器將負責控制日志信息。其語法為:

public static Logger getLogger( String name)

通過指定的名字獲得記錄器,如果必要的話,則為這個名字創建一個新的記錄器。 Name 一般取本類的名字,比如:

static Logger logger = Logger.getLogger (Test.class.getName () )

 

Ø         讀取配置文件

當獲得了日志記錄器之后,第二步將配置 Log4j 環境,其語法為:

BasicConfigurator.configure () : 自動快速地使用缺省 Log4j 環境。

PropertyConfigurator.configure(String configFilename) :讀取使用 Java 的特性文件編寫的配置文件。

例: PropertyConfigurator.configure(".\\src\\log4j.properties"), 若將 log4j.properties 放在工程根目錄下也可不寫此句,程序會自動找到配置文件。

DOMConfigurator.configure ( String filename ) :讀取 XML 形式的配置文件。

 

Ø         輸出日志信息

當上兩個必要步驟執行完畢,就可輕松地使用不同優先級別的日志記錄語句插入到您想記錄日志的任何地方,其語法如下:

Logger.debug ( Object message ) ;

Logger.info ( Object message ) ;

Logger.warn ( Object message ) ;

Logger.error ( Object message ) ;

 

log4j 范例程序

下面將使用一個最簡單的范例程序來進一步說明 log4j 的使用方法。程序代碼如下:

 

import org.apache.log4j.*;

import org.apache.log4j.PropertyConfigurator;
import org.apache.log4j.xml.DOMConfigurator;

public class LogTest {

static Logger logger = Logger.getLogger(LogTest.class.getName());

public static void main(String[] args) {

PropertyConfigurator.configure ( “.\\src\log4j.properties”) ;

//DOMConfigurator.configure(".\\src\log4j.xml");// 加載 .xml 文件
logger.debug("Debug ...");

logger.info("Info ...");

logger.warn("Warn ...");

logger.error("Error ...");

}

}

3.   log4j in database

3.1. 數據庫配置

Ø         導入所需的驅動包

無論使用哪種數據庫都需要將驅動包導入服務中。

Ø         創建所需的表

首先要保證你的數據庫中有 log 表,并且保正字段的長度,否則寫入日志時操作會失敗

數據字典說明:

CREATE TABLE LOG (

        ID                 INTEGER NOT NULL PRIMARY KEY,

        LOGDATE            DATE,

        LOGTIME            TIME,

        LOGTHREAD          VARCHAR(50),

        LOGLEVEL           VARCHAR(50),

        LOGCLASS           VARCHAR(50),

        LOGLOGGER          VARCHAR(200),

        LOGMESSAGE         VARCHAR(2000)

)

GO

3.2. log4j 配置文件

## 配置數據庫聯接

log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender

log4j.appender.DATABASE.URL=jdbc:db2://127.0.0.1:50000/pbdb

log4j.appender.DATABASE.driver=com.ibm.db2.jcc.DB2Driver

log4j.appender.DATABASE.user=erpt1104

log4j.appender.DATABASE.password=erpt1104

log4j.appender.DATABASE.sql = INSERT INTO log (logDATE,logTIME,LOGThread,loglevel,logClass,logLogger,logMessage) values ('%d{yyyy-MM-dd}','%d{HH:mm:ss}','%t', '%p', '%c', '%l', '%m')

log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout log4j.appender.DATABASE.layout.ConversionPattern = %d{yyyy MM dd HH:mm:ss,SSS} %-5p %t %c %m

 

說明:

%d 輸出日志時間點的日期或時間,默認格式為 ISO8601 ,也可以在其后指定格式,比如: %d{yyyy-MM-dd HH:mm:ss} ,輸出類似: 2007-3-29 17:49:27 ,剛好適合插入 SQLServer ;

%t 產生該日志事件的線程名;

%p 日志的 log_level ,如 DEBUG 、 WARN 或者 INFO ;

%c 輸出所屬的類目,通常就是所在類的全名,如“ iNotes.Default ”;

%m 日志的內容;

%l 輸出日志事件的發生位置,包括類目名、發生的線程,以及在代碼中的行數。如 Test.main(Test.java:33) ;

 %n 輸出一個回車換行符, Windows 平臺為“ \r\n ”, Unix 平臺為“ \n ”

3.3. java 中調用

import sun.jdbc.odbc.*;

import java.sql.*;

 

import org.apache.log4j.Category;

import org.apache.log4j.Level;

import org.apache.log4j.Logger;

import org.apache.log4j.PropertyConfigurator;

import org.apache.log4j.jdbc.*;

 

static Logger logger = Logger.getLogger(Test.class.getName ());

PropertyConfigurator.configure ( "log.properties" ) ;

logger.info ( "test" );

 

運行項目,你就會看到執行了 sql 語句,數據庫中便插入相關數據,如需對日志進行分析整理,這就不是 log4j 的事情了。

 

4.   最后說明:

Doc 文檔可以從其網站上下載:

http://logging.apache.org/log4j/docs/api/index.html

http://logging.apache.org/log4j/docs/documentation.html

 
關于 eclipse 的 log4j的插件log4e  可以去他的官方網站上下載:http://log4e.jayefem.de/index.php/Download