log4j 使用筆記

 

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章