-
2010-10-18
使用log4j用于从console和文件输出信息 - [Java]
虽然java ee 自带了log组件,在程序中可以直接调用,但是它还不能满足我们开发中的一些要求,例如将log信息输出到文件,输出到emal,输出到socket
而这些log4j实现了下面以一个filter为例说明如何将在web应用中将有关的信息输出到console和文件中。
1.准备一个sort1.properties文件,并进行配置,并存放在webRoot目录下
log4j.rootLogger=INFO,A1,R
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} %5p [%c{1}] - %m%nlog4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.File=d:/test.log
log4j.appender.R.DatePattern='.'yyyy-MM-dd
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} %5p [%c] - %m%n
2.在web.xml配置filter
<filter>
<filter-name>logFilter</filter-name>
<filter-class>com.sunhm.LogFilter</filter-class>
<init-param>
<param-name>log4j-init-file</param-name>
<param-value>sort1.properties</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>logFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>3.在buildPath中添加common log4j组件
3.在程序中实现Filter接口
package com.sunhm;import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
public class LogFilter implements Filter {static Logger logger = Logger.getLogger(LogFilter.class);
public void destroy() {
// TODO Auto-generated method stubl
logger.info("LogFilter::destroy");
}
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
// TODO Auto-generated method stubHttpServletRequest request = (HttpServletRequest) arg0;
HttpServletResponse response = (HttpServletResponse) arg1;long startTime = System.currentTimeMillis();
String requestURI = request.getRequestURI();requestURI = request.getQueryString() == null ? requestURI
: (requestURI + "?" + request.getQueryString());arg2.doFilter(request, response);
long endTime = System.currentTimeMillis();
logger.info(request.getRemoteAddr() + " 访问了 " + requestURI + ", 总用时 "
+ (endTime - startTime) + " 毫秒。");}
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub// 获取 Filter 的 name,配置在 web.xml 中
String prefix = arg0.getServletContext().getRealPath("/");
String file = arg0.getInitParameter("log4j-init-file");
if(file != null)
{
PropertyConfigurator.configure(prefix+ file);
}logger.info("LogFilter:init");
}}







