web应用中单独使用log4j
web应用中单独使用log4j
log4j.properties文件配置如下:
- log4j.rootLogger=ERROR,CONSOLE,A1
- log4j.addivity.org.apache=true
- log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
- log4j.appender.A1.File=${webappHome}/WEB-INF/logs/website.log
- log4j.appender.A1.Encoding=GBK
- log4j.appender.A1.Threshold=DEBUG
- log4j.appender.A1.DatePattern='.'yyyy-MM-dd
- log4j.appender.A1.layout=org.apache.log4j.PatternLayout
- log4j.appender.A1.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L : %m%n
这里,我们使用${webappHome}来取得应用路径,webappHome是个变量。我们是从哪里取得的值呢?是从我们自己的类中,因此必须写这个类。很简单:
- package com.clientmanager.util;
- import javax.servlet.ServletConfig;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import org.apache.log4j.PropertyConfigurator;
- public class Log4jInit extends HttpServlet {
- public void init(ServletConfig config) throws ServletException {
- String prefix = config.getServletContext().getRealPath("/"); //获取当前路径
- String file = config.getInitParameter("log4j");//从web.xml中获取参数值,找到log4j这个文件
- System.setProperty("webappHome", prefix); //log4j.properties文件中的变量是在这里设置的
- if (file != null) {
- PropertyConfigurator.configure(prefix + file);
- }
- }
- }
好了,有了这个类,下一步是要在服务器启动时来初始化这个类。所以要在web.xml中进行配置
web.xml
- <servlet>
- <servlet-name>log4j-init</servlet-name>
- <servlet-class>com.clientmanager.util.Log4jInit</servlet-class>
- <init-param>
- <param-name>log4j</param-name>
- <param-value>WEB-INF/classes/log4j.properties</param-value>
- </init-param>
- <load-on-startup>0</load-on-startup>
- </servlet>
最后说一点,如果你用struts,而在web.xml中配置了ServletAction,它的启动级别为<load-onstartup>0</load-on-startup>,那么我们的这个类的的启动级别不能低于它,否则可能会出现找不到路径的问题