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 Log4j简介 **Apache Log4j**是一款流行的Java日志框架,由Apache软件基金会开发维护。它提供了一种灵活的日志记录机制,允许开发者在应用程序中加入日志记录功能。Log4j具有高度可配置性,支持多种...
Apache Log4j2 紧急缓解措施 Apache Log4j2 是一个流行的 Java 日志记录工具,但最近出现了严重的安全漏洞, Apache Log4j2 紧急缓解措施旨在帮助开发者尽快修复该漏洞,避免攻击者的攻击。 一、修改启动脚本 在...
### 一、Apache Log4j简介 Apache Log4j是一个开源的日志框架,用于Java应用程序的日志记录。它提供了强大的功能来控制日志的输出级别、格式化以及目的地(如控制台、文件等)。Log4j的设计目标是灵活且易于配置,...
Apache Log4j2 是一个广泛使用的Java日志框架,它为开发者提供了强大的日志记录功能。然而,在2021年12月初,一个严重的安全漏洞(CVE-2021-44228)被公开,这个漏洞被称为"Log4Shell",允许攻击者通过注入恶意的...
Apache Log4j 2 (apache-log4j-2.17.1-bin.tar.gz)是对 Log4j 的升级,它比其前身 Log4j 1.x 提供了重大改进,并提供了 Logback 中可用的许多改进,同时修复了 Logback 架构中的一些固有问题。修复了安全漏洞 CVE-...
Apache Log4j是Java平台上的一个著名日志记录框架,广泛应用于各种Java应用程序中,包括服务器、Web应用、企业级软件等。Log4j 1.2.16是该框架的一个版本,提供了丰富的日志功能,允许开发者灵活地控制日志信息的...
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_1.2.17 完整依赖包,在jdk1.8.201中测试通过。使用教程https://www.tutorialspoint.com/springmvc/springmvc_log4j.htm
Apache Log4j 2 源代码( apache-log4j-2.17.1-src.tar.gz) 是对 Log4j 的升级,它比其前身 Log4j 1.x 提供了重大改进,并提供了 Logback 中可用的许多改进,同时修复了 Logback 架构中的一些固有问题。修复了安全...
Apache Log4j 2 源代码( apache-log4j-2.17.1-src.zip) 是对 Log4j 的升级,它比其前身 Log4j 1.x 提供了重大改进,并提供了 Logback 中可用的许多改进,同时修复了 Logback 架构中的一些固有问题。修复了安全漏洞...
Apache Log4j是Java平台上的一个著名日志记录框架,广泛应用于各种企业级软件系统中。这个"apache-log4j-2.17.0-bin.tar.gz"文件是一个压缩包,其中包含了Log4j 2.17.0版本的二进制文件,通常包括可执行的JAR文件和...
赠送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-...
标题中的"ApacheLog4j_Win.zip"暗示这是一个针对Windows操作系统的Apache Log4j漏洞验证工具。这意味着该压缩包可能包含一系列用于检测和测试Log4j 2安全漏洞的工具和脚本,特别是针对JNDI(Java Naming and ...
Log4j 是一个日志记录框架,Log4j 2 是对 Log4j 的升级,提供了重大改进,超越其前身 Log4j 1.x,并提供许多其它现代功能 ,例如对标记的支持、使用查找的属性替换、lambda 表达式与日志记录时无垃圾等。 Apache ...
3.3.4.jar(Log4j2异步日志的底层实现)、log4j-api-2.19.0.jar(log4j门面)、log4j-core-2.19.0.jar(log4j实现)、log4j-slf4j-impl-2.19.0.jar(SLF4J与Log4j绑定)、slf4j-api-1.7.30.jar(SLF4J门面)、apache-...
Apache Log4j 2.17.2 是一个重要的安全更新版本,主要针对先前发现的严重漏洞进行修复。Log4j 是 Apache 组织开发的一个广泛使用的Java日志框架,它允许开发者在应用程序中实现灵活的日志记录。此次发布的binaries...
Apache Log4j 是一个广泛使用的 Java 日志框架,它允许应用程序记录各种运行时信息,包括错误、警告和其他诊断数据。然而,2021 年底,Log4j 发现了一个严重的安全漏洞,被称为 CVE-2021-44228(也称为 Log4Shell)...
解决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 是一个广泛使用的开源日志框架,它为Java应用程序提供了强大的日志记录功能。Log4j 的主要优点在于它的灵活性和可配置性,允许开发者根据需要调整日志的输出目的地、格式以及级别。 **配置Log4j** ...