用于指定 appender 将日志语句写入日志目的地所采用的格式。appender 可以用来格式化输出结果的各种布局包括:简单布局、模式布局和 HTML 布局。
[1]先看看Log4j的包目录结构:
org.apache.log4j:log4j主要的类、接口以及特殊的Appender类、Layout、Level和Logger
org.apache.log4j.spi:包含了针对SPI的一部分扩展【SPI——System Programming Interface】
org.apache.log4j.chainsaw:基于Java Swing的一个GUI日志查看器:
org.apache.log4j.config:用来设置或者获取某些组件的相关属性
org.apache.log4j.helpers:仅仅被log4j库内联使用的多个Class的集合,一般情况下不对外
org.apache.log4j.jdbc:一个Appender用来记录JDBC连接的相关事件
org.apache.log4j.jmx:在JMX开发的时候可以配置的基于JMX的日志记录,但是目前该包里面的类还不是特别稳定
org.apache.log4j.lf5:【目前很少用,我也不知道这部分用途,没用过】
org.apache.log4j.net:用来进行远程日志记录的Appender,主要用于JMS、SMTP以及基于Socket的日志记录,用于向一个log4j服务器发送日志进行远程的日志记录
org.apache.log4j.nt:Java本地接口的应用【JNI】,接口用Java,实现用C代码,用来记录Windows NT系统事件日志的Appender组件
org.apache.log4j.or:根据对象类型来对对象进行Render操作的帮助类
org.apache.log4j.performance:性能测试代码
org.apache.log4j.xml:包含了多个XML组件,使用DOM Tree的结构在Log4j环境里面用来记录XML格式的日志
org.apache.log4j.varia:包含了多个Appender以及Filters和其他相关组件
[2]Log4j的安装:
Log4j下载下来过后需要进行简单的安装,先保证原来的系统环境和Java环境是正常的:
- 下载log4j的jar包,上边已经提供了下载地址
- 将这些包解压到一个目录里面,【*:一般对于开发人员最好将jar的包分类放在不同的目录下边方便使用。】
- 将包下边的log4j-1.2.15.jar放入开发的CLASSPATH里面,关于Java里面CLASSPATH的一些问题留到开发用Java里面去讲解
-
还需要下载两个辅助解析XML的jar,下载地址http://archive.apache.org/dist/xml/xerces-j/,这里我下载的最新版本2.9.0,取出里面的xercesImpl.jar和xml-apis.jar两个jar文件放到CLASSPATH里面。【*:在IDE环境下有专程针对CLASSPATH的设置,这种情况防止jar冲突最好的方式就是保持CLASSPATH里面只有java标准的环境】
2)Log4j的核心概念:
[1]Log4j中的Logger:
Logger在Log4j中是一个很核心的概念,它是日志进程里面的核心组件,在Log4j里面,Logger总共分为六个日志记录级别,其定义位于org.apache.log4j.Level类里:
- TRACE:这种细粒度信息时间不仅仅针对调试,
- DEBUG:指出细粒度信息事件对调试应用程序是非常有帮助的,该级别的日志主要用于辅助开发人员调试;
- INFO:该级别表明消息上细粒度上突出强调了应用程序的运行过程
- WARN:表明有可能会出现潜在错误的情形
- ERROR:表明虽然程序发生了错误事件,但是仍然不影响系统的继续运行
- FATAL:该级别表明了每个严重的错误时间,将会导致应用程序的退出。
根据API里面的描述还存在两个很特殊的级别:
- ALL:这是最低级别,用于打开所有的日志记录
- OFF:这是最高级别,用于关闭所有的日志记录
一般情况下,推荐开发过程只使用ERROR、WARN、INFO、DEBUG四个级别,下图说明了这几个级别相互之间的关系:
从上图可以知道,只有当日志记录器Logger的日志级别高于或者等于输出消息的等级的时候,该日志消息才会被输出。默认情况下,Logger的级别是Debug,如果我们需要创建一个Logger,有以下几种方式:
创建根日志器:
Logger logger = Logger.getRootLogger();
创建一个新的日志器:
Logger logger =newLogger("MyLogger");
创建一个基于类的日志器:
Logger logger =newLogger(MyClass.class);
在Log4j里面设置一个日志的级别使用语句:
logger.setLevel(Level.DEBUG);
【*:在1.2版本之前,Log4j里面没有使用Logger类,主要是使用Category类,从版本1.2开始才使用Logger类,就上边的方式创建Logger】
这里先看一段代码,然后对Category进行一个详细说明,实际上从版本1.2开始Category和Logger是父子关系,Logger从Category类继承而来;在该版本之前我们一般使用Category来创建日志记录器,在前边的版本里面Category就等同于现在我们所见到的Logger。在版本1.2中,Category被标记为deprecated,而直接使用Logger替代它,一般情况下Java里面被标记为deprecated的方法和类都有替代方法以及类来进行对应功能的版本更新,我们一般在开发过程中尽量避免使用标记为deprecated的类或者方法。下边的代码是升级的改动:
// 被抛弃的代码形式:
Category cat = Category.getInstance("foo.bar");
// 目前使用的创建Logger的形式:
Logger logger = Logger.getInstance("foo.bar");
为了使得上边的图形里面的内容更加容易理解,这里提供另外一段代码:
packageorg.susan.java.logging;
importorg.apache.log4j.Level;
importorg.apache.log4j.Logger;
classFoo{}
public classLog4jLevelTester {
public static voidmain(Stringargs[]){
Logger logger = Logger.getLogger(Foo.class);
logger.setLevel(Level.INFO);
// 该请求是被允许的,因为WARN >= INFO
logger.warn("Low fuel level.");
// 该请求时背禁止的,因为DEBUG < INFO
logger.debug("Starting search for nearest gas station.");
}
}
上边这段代码很好说明了logger在对待LEVEL的时候的用法,在setLevel的时候Logger设置了日志器本身的Level,然后在使用里面对应的warn、debug方法的时候会判断使用的方法和日志记录器设置的Level进行详细的比较,当满足上边图示的判断条件的时候才会输出日志信息。在这里还有一点需要注意的是方法warn和debug,这两个方法都不是Logger类所具有的方法,而是从它的父类继承过来的Category的方法,在使该方法的时候会针对我们最初设置的日志的Level进行一个比较和判断,最终决定是否要被记录下来。那么在环境配置好的情况下,我们执行该程序。
【异常】这里会遇到一个初学Log4j的常见问题,我们会发现控制台只有这句话输出:
log4j:WARN No appenders could be found for logger (org.susan.java.logging.Foo).
log4j:WARN Please initialize the log4j system properly.
这句话的意思是在系统环境里面没有找到我们所需要的配置文件,一般理解是缺乏log4j.properties属性文件,在此处,如果我们不使用配置文件的方式就将下边的代码修改成:
packageorg.susan.java.logging;
importorg.apache.log4j.BasicConfigurator;
importorg.apache.log4j.Level;
importorg.apache.log4j.Logger;
classFoo{}
public classLog4jLevelTester {
public static voidmain(Stringargs[]){
BasicConfigurator.configure();
Logger logger = Logger.getLogger(Foo.class);
logger.setLevel(Level.INFO);
// 该请求是被允许的,因为WARN >= INFO
logger.warn("Low fuel level.");
// 该请求时背禁止的,因为DEBUG < INFO
logger.debug("Starting search for nearest gas station.");
}
}
修改成上边这段代码过后,我们就可以直接在没有log4j.properties配置文件的情况下直接运行上边的程序,该代码将会有以下输出:
0 [main] WARN org.susan.java.logging.Foo - Low fuel level.
通过这里我们就可以知道Log4j里面的Level的排序为:DEBUG < INFO < WARN < ERROR < FATAL,等到后边再来分析上边的代码如果不使用BasicConfigurator.configure();而是使用我们开发常用的属性文件log4j.properties进行日志记录的相关配置,关于配置文件的详细内容等介绍完Layout和Appender了过后再说明。
[2]Log4j中的Appender:
Log4j里面的Appender类似于JDK 1.4 Logging Framework里面的Handler组件,其主要目的是管理我们日志记录的结果,描述了这些日志怎样进行输出,下边列举了比较常用的一些Appender的快照:
- ConsoleAppender:这种Appender会管理我们的日志消息,将日志事件记录到控制台以System.out或者System.err作为输出机制,它默认的输出为System.out;
- RollingFileAppender:这种Appender从FileAppender继承过来,大部分属性和FileAppender是类似的,当日志记录的文件到达文件容量的最大值的时候,会自动创建一个新的日志文件
- FileAppender:将日志输出到普通文本文件【这里有点需要说明,好像从版本1.2开始该Appender将会标记为禁用,替代的方案为该类的类:WriterAppender和ConsoleAppender】
- DailyRollingFileAppender:该Appender从FileAppender继承而来,能够按照一定的频度滚动日志记录文件
- WriterAppender:根据用户的选择将日志的信息以数据流的方式发送到任何用户指定的地方
- SMTPAppender:在特殊的事件日志发生的时候,发送一封Email到指定的邮件地址,一般情况下是针对ERROR级别以及FATAL级别的错误进行这种Appender的配置
- SocketAppender:将发送一个LoggingEvent对象到一个远程的日志服务器,一般情况下是一个SocketNode对象
- SocketHubAppender:将发送一个LoggingEvent对象的集合到一个远程的日志服务器,一般情况下是一个SocketNodes
- SyslogAppender:将日志记录消息发送到配置好的一个syslog远程服务器上
- TelnetAppender:该Appender和SocketHubAppender类似,也是向服务器发送日志信息,但是不是一个SocketNode对象或者SocketNode对象列,一般发送的是Category【1.1版】输出的结果。
整个org.apache.log4j包结构里面,Appender的结构图如下:[I]标识接口,[A]标识抽象类,[C]标识具体类
接口:
Appender[I]
类层次结构:
AppenderSkeleton[A]
|—AsyncAppender[C]
|—org.apache.log4j.jdbc.JDBCAppender[C]
|—org.apache.log4j.net.JMSAppender[C]
|—org.apache.log4j.lf5.LF5Appender[C]
|—org.apache.log4j.nt.NTEventAppender[C]
|—org.apache.log4j.varia.NullAppender[C]
|—org.apache.log4j.net.SMTPAppender[C]
|—org.apache.log4j.net.SocketAppender[C]
|—org.apache.log4j.net.SocketHubAppender[C]
|—org.apache.log4j.net.SyslogAppender[C]
|—org.apache.log4j.net.TelnetAppender[C]
|—WriterAppender[C]
|—ConsoleAppender[C]
|—FileAppender[C]
|—RollingFileAppender[C]
|—org.apache.log4j.varia.ExternallyRolledFileAppender[C]
|—DailyRollingFileAppender[C]
margin-top: 0px; margin-bottom: 0p
分享到:
相关推荐
"Junit+log4j+slf4j"这个组合涉及到的是Java编程领域的三个关键工具:JUnit用于进行单元测试,log4j是经典的日志记录库,而SLF4J(Simple Logging Facade for Java)则是一个日志抽象层。 JUnit是Java领域最广泛...
Java异常处理机制是Java编程中不可或缺的一部分,它用于处理程序运行过程中可能出现的错误或异常情况。这个机制通过五个关键字:try、catch、throw、throws、finally来实现。 1. **try** 关键字:用于包围可能抛出...
在本讲中,我们将深入探讨如何在SpringBoot项目中整合JUnit测试框架以及Log4J日志系统。SpringBoot简化了Java应用的开发流程,而JUnit是广泛使用的单元测试工具,Log4J则是一款强大的日志记录框架。让我们一起了解...
Spring Boot集成了多种日志框架,如Logback和Log4j2,可以方便地配置日志级别,格式,输出位置等。通过定制化日志策略,我们可以获取到丰富的异常信息,便于排查和修复问题。 6. **公共异常类**:为了规范化异常...
这里我们关注的是基于Java技术栈的Web应用环境,具体包括Hibernate4、SpringMVC、JUnit4和log4j这四个核心组件。下面将详细介绍这些组件以及如何整合它们进行环境搭建。 **1. Hibernate4** Hibernate是一个开源的...
提供的压缩包文件名为 "log4j_tutorial.pdf" 和 "javLog4J.pdf",很可能分别包含了Log4j的基础教程和关于Java中的Log4j使用细节。这些PDF文档可能涵盖了Log4j的配置、用法示例、最佳实践等内容,以及如何在Java项目...
标题 "spring3_junit4.10_log4j" 暗示了这是一个关于整合Spring 3.0...同时,他们会在测试过程中利用JUnit提供的断言和其他工具来确保代码质量,而Log4j则会记录下程序运行中的重要事件和错误信息,帮助他们定位问题。
JAVA程序设计中的异常和断言是程序开发过程中的重要概念,它们帮助开发者处理程序运行时可能出现的问题,确保程序的稳定性和可靠性。 异常处理是JAVA语言中的一个关键特性,用于处理程序执行过程中出现的非正常情况...
java.lang.AssertionError 是一种断言错,指的是在程序中断言失败时抛出的异常。 15. java.lang.ClassCircularityError 类循环依赖错误 java.lang.ClassCircularityError 是一种类循环依赖错误,指的是在程序中类...
Java断言(assert) Java断言是一种 debugging 机制,允许开发者在Java...Java断言是一种强大的调试工具,可以帮助开发者快速地检测程序中的错误和异常。但是,断言应该谨慎使用,不然可能会影响程序的性能和可靠性。
7. **commons-logging**:这是Apache Commons项目的一部分,提供了一个通用的日志接口层,允许开发者在不改变代码的情况下切换不同的日志实现,如log4j、Java内置的java.util.logging,或者其它第三方日志库。...
JAVA断言技术详解,1、What will happen when you attempt to compile and run the following code? (Assume that the code is compiled and run with assertions enabled) 1. public class AssertTest 2. { 3. ...
本书内容非常全面,涵盖了《Java编程思想》、《Java学习笔记》等书籍所有知识要点,并结合作者自己经验总结而编写,内容丰富程度胜过一切书籍 众所周知,一般书籍为了销售需要,往往很少的知识点,却需要添加大量的...
Java异常处理是编程中至关重要的一个环节,它确保了程序在遇到错误情况时能够优雅地处理问题而不是突然崩溃。在Java中,异常分为两大类:错误(Error)和违例(Exception)。错误通常是JVM系统内部的问题,如内存...
**Log4j**:Log4j是Java的日志工具,它提供了灵活的日志记录配置,可以帮助开发者跟踪和调试程序中的问题。通过配置不同的日志级别(如DEBUG、INFO、WARN、ERROR),开发者可以在需要时控制日志的详细程度。Log4j...
5. **log4j-1.2.14.jar**:Log4j是Apache组织提供的一款日志记录框架,广泛应用于各种Java应用中。通过配置,开发者可以选择不同的日志级别(如DEBUG、INFO、WARN等),控制输出的日志信息,便于调试和监控程序运行...
### JAVA中常见的异常知识点详解 #### 一、`java.lang.NullPointerException` 在Java编程中,`java.lang.NullPointerException`(简称NPE)是最常见的异常之一。这种异常通常发生在尝试访问一个空对象引用的方法或...
在IT行业中,Java是一种广泛应用的面向对象的编程语言,由Sun Microsystems(现为Oracle Corporation)于1995年发布。这个"Test6.java.zip"文件是一个包含Java源代码的压缩包,通常用于存储和传输代码。源代码文件的...
Java异常处理是编程中至关重要的一个部分,它用于处理程序运行时出现的错误和异常情况。Java异常体系是基于面向对象的设计,使得错误处理更加结构化和可维护。以下是Java异常的一些主要类别和相关知识点: 1. **...
全书共14章,包括Java基本的程序结构、对象与类、继承、接口与内部类、图形程序设计、事件处理、Swing用户界面组件、部署应用程序和Applet、异常日志断言和调试、泛型程序设计、集合以及多线程等内容。 全书对Java...