log4j-调试好帮手
1 log的作用
尽管已经涌现出了不少调试应用程序的手段,直接把信息输出到屏幕(或者其他地方)仍然是非常重要的手段,有时甚至是唯一可以利用的方法,尤其在调试分布式应用程序时,比如基于WEB的应用程序。相信大家对WEB应用程序的调试难度都有所体会。
2 为什么选用log4j
System.out.println/printf,的缺点:
a. 信息的输出不够灵活,并且繁琐。比如,要输出执行处的文件名,行数,当前时间等,println/printf显得很原始。
b. 如果要改变输出的内容和格式,需要重新编译源程序,不够灵活。
c. 更严重的是,如果程序中有很多的println/printf,会严重的影响程序的性能。
为了解决上面的问题,人们开发了一些专门log信息的软件包,apache组织的log4j就是其中的佼佼者,在很多著名的开放源代码的项目中都得到了广泛的应用。
log4j致力于:
a. 速度。速度是log4j设计的最重要的目标。从log4j一开始出现,注重运行的速度就一直放在首位,并且坚持不懈地进行着改进和完善。
b. 灵活性。在保证速度的基础上,log4j提供了信息输出的极大灵活性。后面我们通过实例将看到,使用log4j后,不需要重新编译源程序,只需要改变log4j的配置文件,输出的信息就可以随之改变了。
c. 可扩展性。log4j是apache组织的产品,遵循开放源代码的APL协议,你当然可以进行源代码级的定制和扩展。实际上,在log4j的发布包中,就包含了几个如何扩展log4j的例子。
d. 简单。易于使用也是log4j的目标之一。毕竟,log功能只是程序的辅助功能,太复杂的使用方法会宣宾夺主的:-)
3 log4j概念
log4j有三大部分组成:
a.Logger。是我们在程序中要用到的部分。我们就是使用了log4j提供的Logger类中的方法来具体的log信息的。
b.Appender。这里定义log的信息送到哪里去。名字比较怪,大概是因为一般的log文件都是把信息增加到文件最后的缘故吧?^-^ log4j支持的Appender很多,包括终端,文件,socket端口,NT的event logger,Unix的syslog等,非常灵活。
c.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,我们通过实例来具体看看这几个方法怎么用。
4 log4j实例
请看如下的简单程序:
文件MyApp.java:
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");
}
}
文件Bar.java:
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");
}
}
配置文件log4j.properties:
# 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
运行结果:
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
5 log4j的配置文件
配置文件的主要作用为:
a. 定义输出信息的目的地。log4j支持的输出类型非常多,有文件,终端,socket,unix syslog,NT event log等。log4j没有缺省的输出目的地,因此必须在配置文件至少指定一个目的地。
b. 定义输出格式。对于每一个输出目的地,都可以定义对应的输出格式。通常,输出格式可以通过灵活的PatternLayout来控制。 PatternLayout的控制方式非常类似于C语言中的printf语句的用法,完整的格式控制字符可以参考PertternLayout的 javadoc文档。
c. 可以灵活的开关log,便于调试。
Bibliography
online docement
http://www.apache.org,阅读log4j的在线文档,尤其是log4j的作者自己写的shot introduction,非常好。
1.2在线API:
http://logging.apache.org/log4j/1.2/apidocs/index.html
log4j in jboss
jboss对log4j的扩展,在$JBOSS_HOME/lib/jboss-common.jar中。
分享到:
相关推荐
Apache Log4j 2 (apache-log4j-2.17.1-bin.zip)是对 Log4j 的升级,它比其前身 Log4j 1.x 提供了重大改进,并提供了 Logback 中可用的许多改进,同时修复了 Logback 架构中的一些固有问题。修复了安全漏洞 CVE-...
Apache Log4j2 远程代码执行漏洞检测工具,包含windows版和linux版。图形化 Apache Log4j2检测工具
Apache Log4j2紧急缓解措施
Apache Log4j_1.2.17 完整依赖包,在jdk1.8.201中测试通过。使用教程https://www.tutorialspoint.com/springmvc/springmvc_log4j.htm
Apache Log4j 2.0 发布第 4 个 Beta 版本,包括的新特性有: o Added Log4j 2 to SLF4J adapter. o LOG4J2-131: Add SMTPAppender. Thanks to Scott Severtson. o Added hostName and contextName to property ...
Apache Log4j 2 源代码( apache-log4j-2.17.1-src.tar.gz) 是对 Log4j 的升级,它比其前身 Log4j 1.x 提供了重大改进,并提供了 Logback 中可用的许多改进,同时修复了 Logback 架构中的一些固有问题。修复了安全...
Pro Apache Log4j second edition Pro Apache Log4j second edition Pro Apache Log4j second edition Pro Apache Log4j second edition Pro Apache Log4j second edition
Apache Log4j 2 (apache-log4j-2.17.1-bin.tar.gz)是对 Log4j 的升级,它比其前身 Log4j 1.x 提供了重大改进,并提供了 Logback 中可用的许多改进,同时修复了 Logback 架构中的一些固有问题。修复了安全漏洞 CVE-...
赠送jar包:apache-log4j-extras-1.2.17.jar; 赠送原API文档:apache-log4j-extras-1.2.17-javadoc.jar; 赠送Maven依赖信息文件:apache-log4j-extras-1.2.17.pom; 包含翻译后的API文档:apache-log4j-extras-...
apache log4j使用大全 log4j使用
解决Apache Log4j 远程代码执行漏洞log4j2部分jar,包含log4j-1.2-api-2.15.0.jar,log4j-api-2.15.0.jar,log4j-core-2.15.0.jar,log4j-to-slf4j-2.15.0.jar
apache log4j 日志系统实现原理.doc,Apache Log4j 学习笔记 Apache Logging Project Homepage: http://logging.apache.org
Apache Log4j 2存在远程代码执行漏洞处置指南 及期检测工具
Apache Log4j 2 源代码( apache-log4j-2.17.1-src.zip) 是对 Log4j 的升级,它比其前身 Log4j 1.x 提供了重大改进,并提供了 Logback 中可用的许多改进,同时修复了 Logback 架构中的一些固有问题。修复了安全漏洞...
ApacheLog4j漏洞验证工具
Log4j 是一个日志记录框架,Log4j 2 是对 Log4j 的升级,提供了重大改进,超越其前身 Log4j 1.x,并提供许多其它现代功能 ,例如对标记的支持、使用查找的属性替换、lambda 表达式与日志记录时无垃圾等。 Apache ...
Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式...
apache-log4j-2.17.0-bin.tar.gz
开源日志框架Apache Log4j2远程代码执行漏洞升级包
Pro Apache Log4j Second Edition