首先导入log4j包到项目的WEB-INF/lib中
1,创建serverlet用来初始化log4j property 文件,加载log4j,
代码如下:
package utill;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import org.apache.log4j.PropertyConfigurator;
public class Log4jInitServlet extends HttpServlet{
private static final long serialVersionUID = 1L;
public void service(ServletRequest req, ServletResponse resp) throws ServletException, IOException {
}
public void init() throws ServletException {
System.setProperty("logPath", "C://Documents and Settings//jl60155//webIVR-workspace//ScriptMaint-WebVersion//logs//myLog.log");
System.err.println("Log4j Servlet test Path: " + System.getProperty("logPath"));
PropertyConfigurator.configure(getServletContext().getRealPath("/") + getInitParameter("configfile"));
}
}
注: 以上log文件位置进行了hardcode, 在项目中应用可用读取属性文件动态加载.
2,配置web.xml,使web services启动时初始化第一步中创建的serverlet 类:
加入如下代码:
<servlet>
<servlet-name>log4j config file</servlet-name>
<servlet-class>utill.Log4jInitServlet</servlet-class>
<init-param>
<param-name>configfile</param-name>
<param-value>WEB-INF/log4j.properties</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
3,创建log4j.properties文件:
内容如下:
#log4j.rootLogger=debug, A1
log4j.logger.ScriptMaint=debug, A1
log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A1.file=${logPath}
log4j.appender.A1.DatePattern=yyyy-MM-dd'.log'
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss, SSS}[%c]-[%p] %m%n
注: 该文件位置取决于web.xml的配置位置, 这里根据项目需要定义了自己的logger,未使用rootLooger,(rootLooger会打印出应用框架中root级别的log信息,
这里是struts2核心jar包中定义的,我没有找到控制方法也不想去修改struts2 jar包,虽然是开源的,项目没那需要,故,使用了自定义的looger), 这里我们用${logPath}获取我们
在初始化的serverlet中设置的系统变量
4, action 中使用looger必要信息:
导入包:
import org.apache.log4j.Logger;
获取looger 付给我们自定义的logger变量:
private static Logger logger = Logger.getLogger("ScriptMaint");
在执行方法execute()中使用:
logger.debug("William Test LOG!");
到我们配置的log文件中查看,正常输出log信息,测试成功!