为了跟踪程序的运行情况及监视用户的操作情况,采用日志记录能很好地满足我们的要求。目前的日志记录工具也不少,相对而言Log4j更受青睐。
Log4j是Jakarta下的一个开源代码的子项目,目前最新版本为log4j 1.2.15,可在http://logging.apache.org/log4j/1.2/download.html进行下载使用。通过Log4j,可以使用定制的格式把调试信息和日志信息输出到一个或多个需要的地方(如控制台、文件、数据库、GUI组件、套接口服务器、NT的事件记录器等)。另外还可以定义每一条日志信息的级别,能够更加细致地控制日志的生成过程。
所有的这一切,均可通过一个配置文件来进行灵活配置,无须修改源程序。
Log4j包括3个很重要的组件:公共类 Logger、公共接口 Appender和公共抽象类 Layout。
1.公共类Logger
日志记录器(Logger)是日志处理的核心组件,负责日志信息的生成。根据配置的日志级别对生成的日志进行输出或屏蔽。
Log4j定义了 7 个级别的日志信息,具体介绍见表4-9。
表4-9 Log4j的 7 个信息级别
日志记录器(Logger)将只输出那些级别高于或等于它的级别的信息。
定义的级别,可以控制应用程序中相应级别的日志信息的开关。比如在这里定义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被输出。如果没有设置日志记录器(Logger)的级别,那么它将会继承最近的祖先的级别。因此,如果在包com.test.web中创建一个日志记录器(Logger)并且没有设置级别,那它将会继承在包com.test中创建的日志记录器(Logger)的级别。如果在com.test中也没有创建日志记录器(Logger)的话,那么在com.test.web中创建的日志记录器(Logger)将继承root 日志记录器(Logger)的级别,root日志记录器(Logger)经常被实例化而可用,它的级别为DEBUG。
2.公共接口Appender
Appender负责控制日志记录操作的输出,用以指定日志信息的输出目的地(如控制台、文件、回滚文件、发送日志邮件、输出到数据库日志表、自定义标签等)。
Log4j提供的appender列表见表4-10。
表4-10 Log4j提供的appender列表
3.公共抽象类Layout
Layout负责格式化Appender的输出。
Log4j提供的layout见表4-11。
表4-11 Log4j提供的layout列表
Log4j采用类似C语言中的printf函数的打印格式格式化日志信息,输出参数列表(见表4-12)。
表4-12 Log4j提供的输出参数
其实可以完全不使用配置文件,而直接在程序代码中配置Log4j环境。但是,使用配置文件将使应用程序更加灵活。
Log4j支持两种配置文件格式,一种是XML格式的文件,另一种是Java属性文件(键=值)。下面我们讲解使用Java属性文件配置Log4j环境的方法。
1.配置Logger
语法格式:
log4j.rootLogger = [ 日志信息级别 ] , 输出目标appender1, 输出目标appender2, ……
用法举例:
log4j.rootLogger=INFO,A1, R
此实例表示将级别为INFO或INFO以上级别的日志信息在名为A1 和R的两个Appender上输出。
2.配置Appender
语法格式:
log4j.appender.appenderName = Appender名称的全称
log4j.appender.appenderName.option1 = value1
…
log4j.appender.appenderName.option = valueN
用法举例:
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %m%n
此实例表示将名为A1 的Appender按自定义格式输出,输出内容由日期时间、信息内容和回车换行组成。
3.配置Layout
语法格式:
log4j.appender.appenderName.layout = Layout名称全称
log4j.appender.appenderName.layout.option1 = value1
…
log4j.appender.appenderName.layout.option = valueN
用法举例:
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %m%n
4.综合配置实例(log4j.properties)
在Java Web应用中使用Log4j一般遵循以下步骤。
(1)载入配置文件。
语法格式:
//自动快速地使用默认Log4j环境
BasicConfigurator.configure ( );
//读取编写的配置文件
PropertyConfigurator.configure ( String configFilename);
(2)获取日志记录器。
语法格式:
Logger logName = Logger. getLogger( String name);
例如,通过指定的名字获得记录器,name一般取本类的名字:
Logger logger = Logger. getLogger(this.getClass( ));
(3)利用日志记录器生成日志信息,当以上两个必要步骤执行完毕后,便可以轻松地使用不同优先级别的日志记录语句插入到想要记录日志的任何地方了。
语法格式:
Logger.debug ( Object message ) ;
Logger.info ( Object message ) ;
Logger.warn ( Object message ) ;
Logger.error ( Object message ) ;
应用举例:
logger.debug (“这是一条DEBUG信息!” ) ;
logger.info ('这是一条INFO信息!' ) ;
logger.warn ('这是一条WARN信息!' ) ;
logger.error ('这是一条ERROR信息!' ) ;
本实例讲解如何在JSP和Servlet中使用Log4j向控制台和日志文件输出日志信息。
(1)创建一个Log4j的配置文件log4j.properties(见例程4-28)。
例程4-28 log4j.properties
(2)创建一个使用Log4j输出日志的名为TestServlet(见例程4-29)的HttpServlet。
例程4-29 TestServlet.java
(3)创建一个使用Log4j输出日志的JSP页面index.jsp(见例程4-30)。
例程4-30 index.jsp
(4)在web.xml(见例程4-31)中配置TestServlet。
例程4-31 web.xml
运行效果如图4-20所示。
图4-20 index.jsp运行效果
本实例的完整源代码请参考配套光盘的“源代码”部分。
上节所讲的实例虽然实现了在JSP和Servlet中输出日志记录,但每次在使用之前要载入log4j配置文件就显得烦琐。通常在Web应用中,可通过web.xml配置在应用启动时就载入log4j的配置文件以简化工作。
下面,采用Log4j在Web应用中的推荐配置方法针对上节实例进行全面优化。
具体的操作步骤如下。
(1)创建一个负责载入log4j配置文件的HttpServlet。如InitLog4j.java(见例程4-32)
(2)将该HttpServlet配置到web.xml(见例程4-33)中。
(3)编写HttpServlet的载入log4j配置文件的代码(见例程4-34)。
(4)在其他的JSP或Servlet正常使用log4j输出日志记录(见例程4-35)。
例程4-32 InitLog4j.java
例程4-33 修改后的web.xml
例程4-34 修改后的TestServlet.java
例程4-35 修改后的index.jsp
本实例的完整源代码请参考配套光盘的“源代码”部分。