概述
[size=18][b]log4j-调试好帮手[/b][/size]
[color=olive]1 log的作用 [/color]
尽管已经涌现出了不少调试应用程序的手段,直接把信息输出到屏幕(或者其他地方)仍然是非常重要的手段,有时甚至是唯一可以利用的方法,尤其在调试分布式应用程序时,比如基于WEB的应用程序。相信大家对WEB应用程序的调试难度都有所体会。
[color=olive]2 为什么选用log4j [/color]
System.out.println/printf,的缺点:
[color=olive]a.[/color] 信息的输出不够灵活,并且繁琐。比如,要输出执行处的文件名,行数,当前时间等,println/printf显得很原始。
[color=olive]b.[/color] 如果要改变输出的内容和格式,需要重新编译源程序,不够灵活。
[color=olive]c.[/color] 更严重的是,如果程序中有很多的println/printf,会严重的影响程序的性能。
为了解决上面的问题,人们开发了一些专门log信息的软件包,apache组织的log4j就是其中的佼佼者,在很多著名的开放源代码的项目中都得到了广泛的应用。
log4j致力于:
[color=olive]a.[/color] 速度。速度是log4j设计的最重要的目标。从log4j一开始出现,注重运行的速度就一直放在首位,并且坚持不懈地进行着改进和完善。
[color=olive]b.[/color] 灵活性。在保证速度的基础上,log4j提供了信息输出的极大灵活性。后面我们通过实例将看到,使用log4j后,不需要重新编译源程序,只需要改变log4j的配置文件,输出的信息就可以随之改变了。
[color=olive]c.[/color] 可扩展性。log4j是apache组织的产品,遵循开放源代码的APL协议,你当然可以进行源代码级的定制和扩展。实际上,在log4j的发布包中,就包含了几个如何扩展log4j的例子。
[color=olive]d.[/color] 简单。易于使用也是log4j的目标之一。毕竟,log功能只是程序的辅助功能,太复杂的使用方法会宣宾夺主的:-)
[color=olive]3 log4j概念 [/color]
log4j有三大部分组成:
[color=olive]a.[/color]Logger。是我们在程序中要用到的部分。我们就是使用了log4j提供的Logger类中的方法来具体的log信息的。
[color=olive]b.[/color]Appender。这里定义log的信息送到哪里去。名字比较怪,大概是因为一般的log文件都是把信息增加到文件最后的缘故吧?^-^ log4j支持的Appender很多,包括终端,文件,socket端口,NT的event logger,Unix的syslog等,非常灵活。
[color=olive]c.[/color]Layout。这里是定义log信息的输出格式。
实际使用时,append和layout一般在配置文件中出现,程序中可以不去管他。因此,只是使用Logger提供的有限的几个功能就可以了。如下是Logger提供的功能:
getLogger,获得一个Logger对象,以便调用下面的几个方法。
info,输出信息的INFO级别。log4j中,输出信息的级别作用是,当要输出一条信息时,可以规定这条信息的“等级”。这样,就可以在配置文件中限定程序中的logger信息只有高于某个等级时才可以输出,这就是所谓的运行信息过滤技术,非常灵活。log4j的信息优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。比如,如果在配置文件中规定只有info以下级别的调试信息可以输出,那么程序中使用了debug的log信息将不输出。
log,输出指定级别的调试信息。
常用的就这么多,是不是很简单?实际上,error,info等方法是log4j针对不同的消息等级而设计的“便利方法”而已。
ok,我们通过实例来具体看看这几个方法怎么用。
[color=olive]4 log4j实例 [/color]
[color=olive]请看如下的简单程序: [/color]
文件MyApp.java:
[code]import org.apache.log4j.Logger;
import com.foo.Bar;
public class MyApp {
static Logger logger = Logger.getLogger(MyApp.class);
public static void main(String[] args) {
logger.info("entering the application");
Bar bar = new Bar();
bar.doIt();
logger.info("leaving the application");
}
} [/code]
文件Bar.java:
[code]package com.foo;
import org.apache.log4j.Logger;
public class Bar {
static Logger logger = Logger.getLogger(Bar.class);
public static void main(String[] args) {
logger.info("do nothing now");
}
public void doIt(){
logger.debug("do it again");
}
} [/code]
[color=olive]配置文件log4j.properties: [/color]
[code]# Global logging configuration
log4j.rootLogger=DEBUG, stdout,outFile
# log4j.rootLogger=INFO, stdout,outFile
# Console output appender
# stdout is set to be a ConsoleAppender.
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
# stdout uses PatternLayout.
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %-4r [%t] (%F,%L) %-5p %c %x - %m%n
# foo logging configuration
log4j.logger.com.foo=DEBUG
# Rolling file appender
log4j.appender.R = org.apache.log4j.RollingFileAppender
log4j.appender.R.File = example.log
log4j.appender.R.MaxFileSize=100KB
# Keep one backup file
log4j.appender.outFile.MaxBackupIndex=1
log4j.appender.outFile.layout=org.apache.log4j.PatternLayout
log4j.appender.outFile.layout.ConversionPattern=%p %t %c - %m%n[/code]
[color=olive]运行结果:[/color]
[code]2002-11-24 13:47:21,397 0 [main] (MyApp.java,20) INFO MyApp - entering the application
2002-11-24 13:47:21,423 26 [main] (Bar.java,24) DEBUG com.foo.Bar - do it again
2002-11-24 13:47:21,424 27 [main] (MyApp.java,23) INFO MyApp - leaving the application [/code]
[color=olive]5 log4j的配置文件 [/color]
配置文件的主要作用为:
[color=olive]a.[/color] 定义输出信息的目的地。log4j支持的输出类型非常多,有文件,终端,socket,unix syslog,NT event log等。log4j没有缺省的输出目的地,因此必须在配置文件至少指定一个目的地。
[color=olive]b.[/color] 定义输出格式。对于每一个输出目的地,都可以定义对应的输出格式。通常,输出格式可以通过灵活的PatternLayout来控制。 PatternLayout的控制方式非常类似于C语言中的printf语句的用法,完整的格式控制字符可以参考PertternLayout的 javadoc文档。
[color=olive]c.[/color] 可以灵活的开关log,便于调试。
Bibliography
online docement
[url]http://www.apache.org[/url],阅读log4j的在线文档,尤其是log4j的作者自己写的shot introduction,非常好。
1.2在线API:[url]http://logging.apache.org/log4j/1.2/apidocs/index.html[/url]
log4j in jboss
jboss对log4j的扩展,在$JBOSS_HOME/lib/jboss-common.jar中。
最后
以上就是幸福眼神为你收集整理的Apache Log4j简介的全部内容,希望文章能够帮你解决Apache Log4j简介所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复