1
.
Commons-Loggin
简介
Jakarta Commons Logging (JCL)
提供的是一个日志
(Log)
接口
(interface)
,同时兼顾轻量级和不依赖于具体的日志实现工具。它提供给中间件
/
日志工具开发者一个简单的日志操作抽象,允许程序开发人员使用不同的具体日志实现工具。用户被假定已熟悉某种日志实现工具的更高级别的细节。
JCL
提供的接口,对其它一些日志工具,包括
Log4J, Avalon LogKit, and JDK 1.4
等,进行了简单的包装,此接口更接近于
Log4J
和
LogKit
的实现。
2
.快速入门
JCL
有两个基本的抽象类:
Log(
基本记录器
)
和
LogFactory(
负责创建
Log
实例
)
。当
commons-logging.jar
被加入到
CLASSPATH
之后,它会合理地猜测你想用的日志工具,然后进行自我设置,用户根本不需要做任何设置。默认的
LogFactory
是按照下列的步骤去发现并决定那个日志工具将被使用的(按照顺序,寻找过程会在找到第一个工具时中止)
:
1.
寻找当前
factory
中名叫
org.apache.commons.logging.Log
配置属性的值
2.
寻找系统中属性中名叫
org.apache.commons.logging.Log
的值
3.
如果应用程序的
classpath
中有
log4j,
则使用相关的包装
(wrapper)
类
(Log4JLogger)
4.
如果应用程序运行在
jdk1.4
的系统中,使用相关的包装类
(Jdk14Logger)
5.
使用简易日志包装类
(SimpleLog)
org.apache.commons.logging.Log
的具体实现有如下:
-org.apache.commons.logging.impl.Jdk14Logger
使用
JDK1.4
。
-org.apache.commons.logging.impl.Log4JLogger
使用
Log4J
。
-org.apache.commons.logging.impl.LogKitLogger
使用
avalon-Logkit
。
-org.apache.commons.logging.impl.SimpleLog
common-logging
自带日志实现类。它实现了
Log
接口,把日志消息都输出到系统错误流
System.err
中。
-org.apache.commons.logging.impl.NoOpLog
common-logging
自带日志实现类。它实现了
Log
接口。
其输出日志的方法中不进行任何操作。
3
.使用JCL开发
因为
Log4j
的强大,同时开发者又不希望对
Log4j
的依赖性太强。所以目前比较流行的是
Commons-logging
和
Log4j
结合使用。
1.
部署日志器
下载
commons-logging.jar
和
log4j.jar
包,能后把它们放到工程的
lib
目录下,引入工程中。
2.
指定日志器
在属性文件
common-logging.properties
中设置实现接口的类。如下
(
这里设置
Log4j
为所使用的日志包
)
:
#commons-logging.properties
文件配置信息
# org.apache.commons.logging.Log=org.apache.commons.logging.impl.SimpleLog
# Must be one of ("trace", "debug", "info", "warn", "error", or "fatal").
#
利用
log4j
为输出介质
org.apache.commons.logging.Log=
org.apache.commons.logging.impl.Log4JCategoryLog
#JDK5 Logger
#org.apache.commons.logging.Log=org.apache.commons.logging.impl.Jdk14Logger
|
3
.
org.apache.commons.logging.Log
接口中定义的方法
,
按严重性由高到低的顺序有:
log.fatal(Object message);
log.fatal(Object message, Throwable t);
log.error(Object message);
log.error(Object message, Throwable t);
log.warn(Object message);
log.warn(Object message, Throwable t);
log.info(Object message);
log.info(Object message, Throwable t);
log.debug(Object message);
log.debug(Object message, Throwable t);
log.trace(Object message);
log.trace(Object message, Throwable t);
|
除此以外,还提供下列方法以便代码保护。
log.isFatalEnabled();
log.isErrorEnabled();
log.isWarnEnabled();
log.isInfoEnabled();
log.isDebugEnabled();
log.isTraceEnabled();
|
4
.信息级别
确保日志信息在内容上和反应问题的严重程度上的恰当,是非常重要的。
1
)
fatal
非常严重的错误,导致系统中止。期望这类信息能立即显示在状态控制台上。
2
)
error
其它运行期错误或不是预期的条件。期望这类信息能立即显示在状态控制台上。
3
)
warn
使用了不赞成使用的
API
、非常拙劣使用
API, '
几乎就是
'
错误
,
其它运行时不合需要和不合预期的状态但还没必要称为
"
错误
"
。期望这类信息能立即显示在状态控制台上。
4
)
info
运行时产生的有意义的事件。期望这类信息能立即显示在状态控制台上。
5
)
debug
系统流程中的细节信息。期望这类信息仅被写入
log
文件中。
6
)
trace
更加细节的信息。期望这类信息仅被写入
log
文件中。
通常情况下,记录器的级别不应低于
info.
也就是说,通常情况下
debug
的信息不应被写入
log
文件中。
4
.
Apache Commons-logging
使用流程
1
)将
common-logging.jar
包加入到环境变量或者
classpath
。
2
)导入
org.apache.commons.logging.Log; org.apache.commons.logging.LogFactory;
及相关包
3
)在需要使用
logging
的地方获取
Log
实例。
private
static
Log
log
= LogFactory.getLog(Test.
class
);
|
4
)使用
Logger
对象的
debug,info,fatal...
方法。
log
.debug(
"Debug info."
);
|
5.Apache Commons-logging
使用示例
Test.java
package
sample;
import
org.apache.commons.logging.Log;
import
org.apache.commons.logging.LogFactory;
public
class
Test {
private
static
Log
log
= LogFactory.getLog(Test.
class
);
public
void
log(){
log
.debug(
"Debug info."
);
log
.info(
"Info info"
);
log
.warn(
"Warn info"
);
log
.error(
"Error info"
);
log
.fatal(
"Fatal info"
);
}
public
static
void
main(String[] args) {
Test test =
new
Test();
test.log();
}
}
|
结果:
DEBUG sample.Test.log(
Test.java:13
) Debug info.
INFO sample.Test.log(
Test.java:14
) Info info
WARN sample.Test.log(
Test.java:15
) Warn info
ERROR sample.Test.log(
Test.java:16
) Error info
FATAL sample.Test.log(
Test.java:17
) Fatal info
当没有任何配置文件(
.properties
)时,就如同上的结果。此时,它使用的是使用简易日志包装类
(SimpleLog)
。
下面加入包与配置文件,使其使用
log4j
。
1)
加入配置文件
commons-logging.properties
和
log4j.properties
。
2)
将
log4j.jar
和
common-logging.jar
两个包加入到环境变量或者
classpath
。
3
)
Test.java
内容不变。
3)
commons-logging.properties
org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JCategoryLog
|
4
)
log4j.properties
log4j.rootLogger=info, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
# Pattern to output the caller's file name and line number.
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
|
结果:
INFO [main] - Info info
WARN [main] - Warn info
ERROR [main] - Error info
FATAL [main] - Fatal info
|
本文转自zhangjunhd51CTO博客,原文链接:http://blog.51cto.com/zhangjunhd/25135,如需转载请自行联系原作者