Tomcat 学习过程4
一、 Tomcat 开发中日志记录工具的使用。
使用Log4j记录应用开发过程中的问题,Log4j有三个主要组件:Logger、Appender、和layout。
1.1组件说明
1)Logger 的名称是区分大小写的,依据名称可以确定其层次结构(即父子关系),规则如下:
①如果Logger A的名称后跟一个点 “.”,改点又是Logger B 的名称的前缀,就认为Logger A是Logger B 的祖先;
示例 如果存在记录器A.B.C、记录器A.B、记录器A,那么A就是A.B和A.B.C的祖先,同样A.B是A.B.C的父,而A.B.C是A.B的孩子。
②如果Logger A和Logger B之间,Logger B没有任何其他的祖先,就认为Logger A是Logger B 的父亲;
在Logger的层次结构的最顶层是根记录器(root logger),它永远是存在的,而且不能通过名字访问,它有两个特点:总是存在的且能够被重新找回,可以通过访问类的静态方法Logger.getRootLogger()重新找到。其他记录器可以通过访问静态方法Logger.getLogger()被实例化或被得到,方法是将希望获得的记录器名称作为参数。记录器被赋予级别,有一套级别表标准,在org.apache.log4j.Level定义的。可以通过继承Level类定义自己的级别标准,但不鼓励这样做。
如果给定的记录器没有被赋予级别,则会从离最近的拥有级别的祖先处继承得到。如果祖先也没有被赋予级别,那么就从根记录器获得。所以通常情况下,为了让所有的记录器最终都能够被赋予级别,根记录器被预先设定级别。比如在操作properties文件中,会写这么一句:log4j.rootLogger= DEBUG,A1,实际就指定了根记录器及其级别。
2)Appender 在Log4j中,Appender指的是日志记录的输出目的地,当前支持的Appender(目的地),有文件file,控制台console、java.io.OutputStream、java.io.Writer、远程服务器,远程Unix syslog守护者,远程JMS监听者,NT EventLog或者发送e-mail。如果没有合适的Appender,那么就需要考虑自定义Appender了。每一个有效的发送到特定记录器的记录请求都被转送到那个与当前记录器所绑定的Appender上,换句话说,Appender的继承层次是附加在记录器继承层次上的。例如如果一个console Appender被绑定到根记录器上,那么所有的记录请求都可以至少被发送到console。另外,把一个file appender绑定到记录器C,那么针对记录器C(或者C的子孙)的请求记录都可以至少发送到console appender 和file appender。当然这种默认的记录方式可以更改,通过设定记录器的additivity标记(Logger.setAdditivity)为false,从而可以使appender不再具有可加性(Additivity)。但是,如果记录器C的祖先叫做P,且它的additivity标记被设定为false,那么记录信息任然被发送到记录器C机器祖先但只到达记录器P这一层次,包括P在能的记录器的所有appender,但不包括P祖先的。通常,记录器的additivity标记被设置为true。
3)Layout(布局器)patternLayout是Log4j标准的布局器,可以让开发者依照conversion pattern去定义输出格式。Log4j还包括其他的Layout,包括HTMLayout,simpleLayout,XmlLayout,和DateLayout。如果这些不满足,可以自定义Layout。
1.2Log4j的配置
配置方式有三种:
①通过程序配置;
通过程序配置Log4j环境实际上就是在应用程序代码中改变Logger的Level或增加减少Appender等等。
②通过Property文件配置;
通过XML文件配置。
通过XML配置,XML文件格式的定义是通过org/apache/log4j/xml/log4j.dtd,需要了解详细的需要查阅log4j.dtd
浙公网安备 33010602011771号