Apache通用日志包提供一組通用的日志接口,用戶可以自由選擇實現日志接口的第三方軟件
通用日志目前支持以下日志實現
Log4j日志器
JDK1.4Logging
SimpleLog日志器
NoOpLog日志器
Log 接口
通用日志包把日志消息分為6種級別Fatal,Error,Warn,Info,Debug和Trace
org.apache.commons.logging.Log接口代表日志器,它提供了一組輸出日志的方法
fatal(Object message);
error(Object message);
warn (Object message);
info (Object message);
debug(Object message);
trace(Object message);
這里需要注意的是,只有當輸出日志的級別大于等于日志器配置的日志級別時,這個方法
才會真正被執行.例如日志器設置日志級別為Warn,那么程序中,它的
fatal(),error(),warn()方法會被執行,而info(),debug(),trace()
不會被執行.
Log接口還提供了一組判斷是否允許輸出特定級別日志消息的方法
isFatalEnable();
isErrorEnable();
isWarnEnable();
isInfoEnable();
isDebugEnable();
isTraceEnable();
LogFactory接口
org.apache.commons.logging.LogFactory接口提供了獲得日志器實例的兩個靜態方法
public static Log getLog(String name)throws LogConfigurationException
public static Log getLog(Class class)throws LogConfigurationException
public static Log getLog(Class class)
{
getLog(class.getName());
}
Log4J 日志器
Log4J 是Apache的一個開放源代碼的項目.
Log4J由三大組件構成
Logger: 負責生成日志,并能根據配置的日志器級別來決定什么日志消息應該被輸出.
Appender: 定義日志消息輸出的目的地,指定日志消息應該被輸出到什么地方,
這些地方可以是控制臺,文件和網絡設備等.
Layout:指定日志消息的輸出格式
配置通用日志接口
在web應用中使用通用日志包,首先必須進行以下配置
準備有關的jar文件
在commons-logging.properties 屬性文件中指定日志器(即日志實線類)
為特定的日志器設置日志級別,輸出格式和輸出地點等.
準備有關jar文件
這里主要是準備 commons-logging.jar和 log4j.jar 放到lib目錄下
指定日志器
通用日志接口從名為 commons-logging.properties的屬性文件中獲取實現日志
接口的日志器信息,這個文件放在web-inf/class目錄下
在該文件的org.apache.commons.logging.Log屬性指定日志實現類
例如用Log4J日志器,那么設置
org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JCategoryLog
設置日志器屬性
多數日志器允許以配置的方式,指定日志器的輸出格式,地點,或者級別.
配置Log4J
Log4J,由三個重要的組件構成,Logger,Appender和Layout.
Log4J支持兩種配置文件格式:一種是XML格式文件,一種是java屬性文件.
配置Log4J組件
Logger組件支持繼承關系,所有的Logger組件都直接或者間接繼承rootLogger,
配置rootLogger的語法為
log4j.rootLogger=[priority],appenderName,appenderName,..
其中priority是日志級別,可選值OFF,FATAL,ERROR,WARN,INFO,DEBUG,TRACE和ALL
appenderName指定Appender組件,用戶可以同時指定多個Appender組件,例如
以下代碼指定rootLogger的日志級別為INFO,它有兩個Appender,名為console和flie
log4j.rootLogger=INFO,console,file
配置Appender組件
配置日志消息輸出目的地Appender,有以下幾種
org.apache.log4j.ConsoleAppender(控制臺)
org.apache.log4j.FileAppender(文件)
org.apache.log4j.DailyRollingFileAppender(每天產生一個日志文件)
org.apache.log4j.RollingFileAppender(文件大小達到指定尺寸的時候產生一個新文件)
org.apache.log4j.WriterAppender(將日志信息以流個格式發送到任意指定的地方)
例如以下代碼定義了一個名了file的Appender,它把日志信息輸出到log.txt文件
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=log.txt
配置Layout組件
Log4j提供下面幾種Layout
org.apache.log4j.HTMLLayout(以html表格形式布局)
org.apache.log4j.PatterLayout(可以靈活的指定布局模式)
org.apache.log4j.SimpleLayout(包含日志消息的級別和信息字符串)
org.apache.log4j.TTCCLayout(包含日志產生的時間線程和類別)
Log4J采用類似C語言中的printf函數的打印格式格式化日志信息,打印參數如下: %m 輸出代碼中指定的消息
%p 輸出優先級,即DEBUG,INFO,WARN,ERROR,FATAL
%r 輸出自應用啟動到輸出該log信息耗費的毫秒數
%c 輸出所屬的類目,通常就是所在類的全名
%t 輸出產生該日志事件的線程名
%n 輸出一個回車換行符,Windows平臺為“\r\n”,Unix平臺為“\n”
%d 輸出日志時間點的日期或時間,默認格式為ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},輸出類似:2002年10月18日 22:10:28,921
%l 輸出日志事件的發生位置,包括類目名、發生的線程,以及在代碼中的行數。舉例:Testlog4.main(TestLog4.java:10)
如果為名"file"的Appender配置PatterLayout布局,則可以采用如下代碼
log4j.appender.file.layout=org.apache.log4j.PatterLayout
log4j.appender.file.layout.ConversionPattern=%t%p-%m%n
采用以上PatternLayout布局,從日志文件中看到的輸出日志的形式如下
http8080-Processor24 INFO -This is an info message
%t對應"http8080-Processor24" %p對應INFO,%m%n對應后面具體的日志消息
一個簡單的應用
新建log4j.properties
log4j.rootLogger=INFO,a
log4j.appender.a=org.apache.log4j.RollingFileAppender
log4j.appender.a.File=log.txt
log4j.appender.a.layout=org.apache.log4j.SimpleLayout
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class Log4JTest {
/**
* @param args
*/
private static Log log=LogFactory.getLog(Log4JTest.class);
public static void main(String[] args) {
// TODO Auto-generated method stub
log.info("aaa");
}
}
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=660773