Jakarta Log4j培训手册

  • 格式:doc
  • 大小:122.50 KB
  • 文档页数:17

Jakarta Log4j 培训Part 1 : 什么是log4j?log4j是一个Java日志包。

每一个大型的应用程序都需要有日志或者跟踪API,据此,1996年 E. U. SEMPER 项目开发了自己的日志API,这就是log4j API 的前身。

后来经过多次的修改、润色以至重写,这个API发展成了现在Apache Public License下的完善的日志API。

最新的Log4j版本,包括全部的源码,class文件和文档,你可以在/log4j上找到。

顺便,Log4j已经给C, C++,PHP, C#, Python, Ruby, and Eiffel 语言都提供了接口。

Part 2 :做日志有那些好处? 我们为什么选择Log4j?日志是开发和维护大型应用的重要工具。

(1)日志使用简单;(2)在某些场合,比如分布式应用或者多线程环境下,调试器(debugger)可能不适用,最好采用日志的方式;(3)日志可以提供详尽的运行时上下文,从而有助于调试和开发应用;(4)日志一旦被插入,运行时就可以减少很多交互,可以大大提高开发效率;(5)可以作为监控工具使用,比如apache的日志。

Log4j的优点:(1)它提供关于运行程序的准确的环境。

一旦代码被插入,不需要人工干预就可以产生调试信息。

使用者一旦在程序中添加了用于log输出的代码,他们就能通过一个外部的配置文件对这些log信息进行运行时控制而无需重新编译源代码。

(2).通过修改配置文件,就可以按照自己喜欢的格式决定log信息输出到何处(console,文件,...),是否输出。

这样,在系统开发阶段可以打印详细的log 信息以跟踪系统运行情况, 而在系统稳定后可以关闭log输出,从而在能跟踪系统运行情况的同时,又减少了垃圾代码(System.out.println(...)等)。

(3)使用log4j,需要整个系统有一个统一的log机制,有利于系统的规划。

(4)通过Log4j其他语言接口,您可以在C、C++、.Net、PL/SQL程序中使用Log4j,其语法和用法与在Java程序中一样,使得多语言分布式系统得到一个统一的日志组件模块。

而且,通过使用各种第三方扩展,您可以很方便地将Log4j集成到J2EE、JINI甚至是SNMP应用中。

Part 3 :Log4j的三个基本部件Log4j有三个主要的组件:●日志类别(Loggers):日志写出器,供程序员输出日志信息●输出源(Appenders):日志目的地,把格式化好的日志信息输出到指定的地方去●布局(Layouts):日志格式化器,用来把程序员的logging request格式化成字符串这三种类型的组件一起工作使得开发员可以根据信息的类型和级别记录它们,并且在运行时控制这些信息的输出格式和位置。

Logger由一个String类的名字识别,logger的名字是大小写敏感的,且名字之间具有继承的关系,子名有父名作为前缀,用点号.分隔。

如:x.y是x.y.z 的父亲。

根logger (root logger)是所有logger的祖先,它具有如下属性:1)它总是存在的;2)它不可以通过名字获得。

通过调用public static Logger Logger.getRootLogger()获得root logger;通过调用public static Logger Logger.getLogger(String name)或者public static Logger Logger.getLogger(Class clazz)获得(或者创建)一个named logger。

后者相当于调用Logger.getLogger(clazz.getName())。

在某对象中,用该对象所属的类为参数,调用Logger.getLogger(Class clazz)以获得logger被认为是目前所知的最理智的命名logger的方法。

1.用同名参数调用Logger.getLogger(String name)将返回同一个logger的引用。

故可以在一个地方配置logger,在另外一个地方获得配置好的logger,而无须相互间传递logger的引用。

2.logger的创建可以按照任意的顺序,即,父logger可以后于子logger被创建。

log4j将自动维护logger的继承树。

每个logger都可以拥有一个或者多个appender,每个appender表示一个日志的输出目的地,比如console或者某个文件。

可以使用Logger.addAppender(Appender app)为logger增加一个appender;可以使用Logger.removeAppender(Appender app)为logger移除一个appender。

默认情况下,logger的additive标志被设置为true,表示子logger将继承父logger的所有appenders。

该选项可以被重新设置,表示子logger将不再继承父logger的appenders。

root logger拥有目标为system.out的consoleAppender,故默认情况下,所有的logger都将继承该appender。

Part 4:Log4j的配置文件Log4j在程序中有充分的可配置性。

然而,用配置文件配置Log4j 具有更大的弹性。

目前,它的配置文件支持xml和java properties (key=value)文件两种格式。

(1)XML文件格式,例如:<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configuration SYSTEM "log4j.dtd"><configuration><appender name="A1" class="org.apache.log4j.FileAppender"><param name="Append" value="false" /><param name="File" value="temp" /><layout class="org.apache.log4j.PatternLayout"><param name="ConversionPattern"value="%-5p %c{2} - %m\n"/></layout><!-- Reject all LoggingEvents containing the string "Message" in the message field. --><filterclass="org.apache.log4j.varia.StringMatchFilter"><param name="StringToMatch" value="Message" /><param name="AcceptOnMatch" value="false" /></filter><!-- Accept all LoggingEvents containing the string "1" in the message field. --><filterclass="org.apache.log4j.varia.StringMatchFilter"><param name="StringToMatch" value="1" /><param name="AcceptOnMatch" value="true" /></filter></appender><root><appender-ref ref="A1" /></root></configuration>(2)java properties(key=value)文件:1.配置根Logger,其语法为:log4j.rootLogger = [ level ] , appenderName, appenderName, …其中,level 是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。

Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。

通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。

比如在这里定义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来。

appenderName就是指定日志信息输出到哪个地方。

您可以同时指定多个输出目的地。

2.配置日志信息输出目的地Appender,其语法为:log4j.appender.appenderName =.of.appender.classlog4j.appender.appenderName.option1 = value1…log4j.appender.appenderName.option = valueN其中,Log4j提供的appender有以下几种:org.apache.log4j.ConsoleAppender(控制台),org.apache.log4j.FileAppender(文件),org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),org.apache.log4j.W riterAppender(将日志信息以流格式发送到任意指定的地方)3.配置日志信息的格式(布局),其语法为:yout =yout.classyout.option1 = value1…yout.option = valueN其中,Log4j提供的layout有以下几种:org.apache.log4j.HTMLLayout(以HTML表格形式布局),org.apache.log4j.PatternLayout(可以灵活地指定布局模式),org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,打印参数如下:%m 输出代码中指定的消息%p 输出优先级,即DEBUG,INFO,W ARN,ERROR,FATAL %r 输出自应用启动到输出该log信息耗费的毫秒数%c 输出所属的类目,通常就是所在类的全名%t 输出产生该日志事件的线程名%n 输出一个回车换行符,Windows平台为“\r\n”,Unix平台为“\n”%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日22:10:28,921%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。