3.4 配置接口
commons-logging的配置可在系统属性中设置,但是这是一个不好的习惯,系统
属性会影响同一jvm下的所有类,而且不好控制,所以配置commons-logging的
最好位置在commons-logging.properties文件中。使用属性文件配置commons-logging时一定要把其放到软件系统的classpath下。
commons-logging.properties中可以对下面两个属性项进行设置:
org.apache.commons.logging.Log
commons-logging的缺省 LogFactory 按照这个项的值来实例化实现应用编程接
口log的实例。如果这个项没被设置,LogFactory在软件系统的classpath下按下
面的顺序搜索实现log接口的类:
Log4J
JSDK 1.4
JCL SimpleLog
这个规则我们把它称为搜索策略。
org.apache.commons.logging.LogFactory 这个项覆盖缺省的LogFactory实现,用
来满足应用系统的特定需求,如重新定义搜索策略。
4.程式清單:
註:以下兩個properies文件放在classes目錄下,log包會自動找到它們,然後編譯運行程序,就可以看到紀錄日誌得結果。
1. commons-logging.properties
#設置紀錄日誌使用log4j
org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger
org.apache.commons.logging.LogFactory=org.apache.commons.logging.impl.Log4jFactory
#設置紀錄日誌使用jdk1.4 logging包
#org.apache.commons.logging.Log=org.apache.commons.logging.impl.Jdk14Logger
#設置紀錄日誌使用LogKit
#org.apache.commons.logging.Log=org.apache.commons.logging.impl.LogKitLogger
#設置紀錄日誌使用SimpleLog
#org.apache.commons.logging.Log=org.apache.commons.logging.impl. SimpleLog
2. log4j.properties
!log4j對這個屬性文件的解析觀察
log4j.debug=false
!以下兩個屬性還不知道什麼用
log4j.disableOverride=true
log4j.disable=INFO
!設置紀錄所有類的日誌的優先級別
log4j.rootCategory=DEBUG, dest1, dest2
!設置這個包紀錄日誌為假的話,dist1,dist2就不會記錄org.jarrywen.sample.logging.otherpackagelog.LoggingSample的日誌,只有dist3會記錄
!反之,會記錄,這樣就會重複紀錄
log4j.additivity.org.jarrywen.sample.logging.otherpackagelog.LoggingSample=false
!特別指定某個特殊包的日誌的級別和目標設備
log4j.category.org.jarrywen.sample.logging.otherpackagelog.LoggingSample=ERROR, dest3
!這個目標設備用來debug
log4j.appender.dest1=org.apache.log4j.ConsoleAppender
#log4j.appender.dest1.layout=org.apache.log4j.SimpleLayout
log4j.appender.dest1.layout=org.apache.log4j.PatternLayout
log4j.appender.dest1.layout.ConversionPattern=%d %p %c - <%m> (%F.%M:%L) %t%n
!這個目標設備用來trace
log4j.appender.dest2=org.apache.log4j.RollingFileAppender
!該文件紀錄日誌的級別(INFO以上的級別不紀錄)
log4j.appender.dest2.Threshold=WARN
!文件保存路徑
log4j.appender.dest2.File=c:/log4jlog.htm
!是否往文件追加消息
log4j.appender.dest2.Append=true
!設置文件最大值
log4j.appender.dest2.MaxFileSize=100KB
!設置備份文件的最大數量
log4j.appender.dest2.MaxBackupIndex=10
!使用一個html格式來紀錄日誌
log4j.appender.dest2.layout=org.apache.log4j.HTMLLayout
!是否打印該消息的代碼行
log4j.appender.dest2.layout.LocationInfo=true
!設置該日誌的html文件的標題
log4j.appender.dest2.layout.Title=My app title
!這個目標設備用來trace指定類或包
log4j.appender.dest3=org.apache.log4j.DailyRollingFileAppender
#log4j.appender.dest3.Threshold=ERROR
log4j.appender.dest3.File=c:/SpecPackageLog.htm
log4j.appender.dest3.Append=false
log4j.appender.dest3.layout=org.apache.log4j.HTMLLayout
log4j.appender.dest3.layout.LocationInfo=true
log4j.appender.dest3.layout.Title=My app title
3. LoggingSample.java
package org.jarrywen.sample.logging;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class LoggingSample {
private Log log = LogFactory.getLog(getClass().getName());
public static void main(String[] args) {
LoggingSample LoggingSample = new LoggingSample();
//trace,debug,info,warn,error,fatal
//看看個種級別的日誌紀錄
LoggingSample.trace();
LoggingSample.debug();
LoggingSample.info();
LoggingSample.warn();
LoggingSample.error();
LoggingSample.fatal();
org.jarrywen.sample.logging.otherpackagelog.LoggingSample LoggingSample1 = new org.jarrywen.sample.logging.otherpackagelog.LoggingSample();
LoggingSample1.trace();
LoggingSample1.debug();
LoggingSample1.info();
LoggingSample1.warn();
LoggingSample1.error();
LoggingSample1.fatal();
}
public LoggingSample() {
}
public void trace() {
//if (log.isTraceEnabled())
log.trace("trace---系統開始trace紀錄日誌");
}
public void debug() {
//if (log.isDebugEnabled())
log.debug("debug---系統開始debug紀錄日誌");
}
public void info() {
//if (log.isInfoEnabled())
log.info("info---系統開始info紀錄日誌");
}
public void warn() {
//if (log.isWarnEnabled())
log.warn("warn---系統開始warn紀錄日誌");
}
public void error() {
//if (log.isErrorEnabled()){
log.error("error---系統開始error紀錄日誌", new Throwable("測試log.error"));
//}
}
public void fatal() {
//if (log.isFatalEnabled())
log.fatal("fatal---系統開始fatal紀錄日誌", new Throwable("測試log.fatal"));
}
}
4. org.jarrywen.sample.logging .LoggingSample.java
package org.jarrywen.sample.logging.otherpackagelog;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class LoggingSample {
private Log log = LogFactory.getLog(getClass().getName());
public static void main(String[] args) {
LoggingSample LoggingSample = new LoggingSample();
//trace,debug,info,warn,error,fatal
//看看個種級別的日誌紀錄
LoggingSample.trace();
LoggingSample.debug();
LoggingSample.info();
LoggingSample.warn();
LoggingSample.error();
LoggingSample.fatal();
}
public LoggingSample() {
}
public void trace() {
//if (log.isTraceEnabled())
log.trace("trace---系統開始trace紀錄日誌");
}
public void debug() {
//if (log.isDebugEnabled())
log.debug("debug---系統開始debug紀錄日誌");
}
public void info() {
//if (log.isInfoEnabled())
log.info("info---系統開始info紀錄日誌");
}
public void warn() {
//if (log.isWarnEnabled())
log.warn("warn---系統開始warn紀錄日誌");
}
public void error() {
//if (log.isErrorEnabled()){
log.error("error---系統開始error紀錄日誌", new Throwable("測試log.error"));
//}
}
public void fatal() {
//if (log.isFatalEnabled())
log.fatal("fatal---系統開始fatal紀錄日誌", new Throwable("測試log.fatal"));
}
}