原文地址http://www.onjava.com/pub/a/onjava/
一个简单的log4j的例子
这个应用拥有五个servlet(SetupServlet , LogonServlet, GetCommentsServlet, ForgotPasswordServlet, RegisterServlet) 4个JSP;和一个文件的数据库用来存储用户信息(userDB,应该位于web-inf目录下,确保web.xml文件中填写的是正确的路径)
来看一个实际运行的例子,把log4j demo.war文件部署到你的servlet环境中。然后,修改web.xml文件确保其中的参数都真实有效。这个文件位置在所部署的应用的web-inf目录下(另外三个配置文件也一样:config-JDBC,config-MDC,config-NDC)。重起你的服务,启动中会输出一些信息。如果StartupServlet可以找到userDB的话,你将会在屏幕上看到下面的信息
Using properties file:
C:/jakarta-tomcat-
Watch is set to: null
DEBUG - Added line: JohnDoe,herbert,johndoe@john.com,John Doe
前两行的输出是System.out.println打印出来的。其余的都是通过log4j.让我们这是怎么做到的。
用本文编辑工具打开config-simple.properties文件,其中有三行语句(除掉注释)。第一行,log4j.rootLogger=debug,R 设置rootLogger的等级是DEBUG.这一行是默认的,不一定必须要。逗号后的R是必须的,这样是为了告诉LOG4J root logger所对应的是这个名叫R的appender。下面的几行来定义这个appender的属性。
log4j.appender.R=org.apache.log4j.ConsoleAppender这一行定义appender R的类型是ConsoleAppender,简单来说就是这个appender的LOG将输出到命令行。log4j.appender.R.layout=org.apache.log4j.SimpleLayout定义这个appender使用的是simple layout:只输出两种信息:log请求的等级,和实际的输出信息。
Now that we have understood the configuration of our simple example, lets see how we are actually logging in our code. Open up SetupServlet.java in a text editor and look up line 81:
我们介绍了一个简单的配置的例子。现在让我们来看看我们的实际的log的代码。打开SetupServlet.java找到地81行。
PropertyConfigurator.configure(props);
暂时不要去管周围的代码。这行代码是让log4j找到相应的配置文件丛中获得属性。这行代码在你的应用中必须被调用一次,一般都是你的应用的开头位置。在 web 应用中Servlet 的启动代码是个合适的位置。
设置过我们的log4j属性后,我们就做好开始log的准备了。下一步我们要获取一个logger并且使用它来进行所需的log.我们既可以用Logger.getRootLogger()来获取root logger也可以象我们在SetupServlet中那样通过名字来获得一个logger实例。
Logger log = Logger.getLogger(SetupServlet.class);
这个方法返回了相对应的logger,我们可以使用它来进行log.例如我们在112行调用DEBUG方法:log.debug(“Add Line:”+data);实际运行时我们就可以在控制台看到输出了。注意这里我们的配置文件中root logger的等级为DEBUG我们并没有为demo.log4j.servlet.SetupServlet这个logger设置相应的等级它会自动的继承root logger的等级DEBUG,所以我们以上的调用会被送到appender中,试着把root logger的等级改为ERROR会发现之前的那些输出都不见了,这是因为logger的等级变的比实际的log请求的等级高。注意改变root logger的等级你只需要修改配置文件然后重新启动servlet环境就可以(虽然不是一定要重新启动servlet环境这涉及到configureAndWatch我们在后面会讨论这个内容)
我们已经了解了这个简单的例子。让我们重新整理一下这个例子中使用log4j所需要的几步操作
- 创建配置文件. 在文件中:
- 设置root logger的等级,并为之设置appender.
- 定义appender的属性.
- 定义appender的layout.
Management Requirements
虽然我们完成了一个相当简单的例子,并了解LOG4J的功能,我们的例子在实际应用中是显然不够的。现在让我站在你的老板的角度来指出这个例子的不足之处。
- Log到控制台是没什么意义的,这使得必须要有一个人在出现重大问题的时候做记录。
- SimpleLayout 太简单了.输出的信息太少。
- 在web应用中。不同的用户在不同的servlet中产生了各种各样的log信息。要分辨不同用户的信息非常的困难。
第二个问题很简单,我们可以把SimpleLayout换成PatternLayout并且为它定义一个conversion pattern.