Pages

  • Twitter
  • Facebook
  • Google+
  • RSS Feed

2013年3月11日 星期一

【J2EE】建立log4j紀錄日誌 檔名為日期每日備份

沒有留言:
 
剛剛PTT JAVA版的問題
今天剛好有摸到

問題
如何用Apache log4j紀錄伺服器資訊
且記錄檔檔名格式為每日一個log檔
如:20130313_log.txt

我是用最新的函示庫 你要有
commons-logging-1.1.1.jar
這個一般API幫你處理在你不確定紀錄方式的時候
log4j-1.2.17.jar
log4j的本體
兩個丟進/WEB-INF/lib/底下

寫一個Filter紀錄訊息
LogFilter.java:

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.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class LogFilter  implements Filter {
   
    private Log log = LogFactory.getLog(this.getClass());
    private String filterName;
   
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        // TODO Auto-generated method stub
        filterName =  filterConfig.getFilterName();
        log.info("啟動Filter:" + filterName);
    }
   
    @Override
    public void doFilter(ServletRequest req, ServletResponse res,
            FilterChain chain) throws IOException, ServletException {
        // TODO Auto-generated method stub
        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) res;
       
        long startTime = System.currentTimeMillis();
        String requestURI = request.getRequestURI();
       
        requestURI = request.getQueryString() == null ? requestURI : (requestURI + "?" + request.getQueryString());
        chain.doFilter(request, response);
       
        long endTime = System.currentTimeMillis();
        log.info(request.getRemoteAddr() + "存取了" + requestURI + ",總用時" + (endTime - startTime) + "毫秒,");
       
    }


    @Override
    public void destroy() {
        // TODO Auto-generated method stub
        log.info("關閉Filter:" + filterName);
    }

}

web.xml中Filter的設定和網址mapping
<filter>
      <filter-name>LogFilter</filter-name>
      <filter-class>LogFilter</filter-class>
  </filter>
  <filter-mapping>
      <filter-name>LogFilter</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>

關鍵的log4j.properties:
通常放在classes資料夾下

log4j.rootLogger=INFO, day

#org.apache.log4j.DailyRollingFileAppender每日一個紀錄檔
log4j.appender.day=org.apache.log4j.DailyRollingFileAppender
log4j.appender.day.layout=org.apache.log4j.PatternLayout
#記錄檔內容
log4j.appender.day.layout.ConversionPattern=%-d{yyyy-MM-dd HH\:mm\:ss,SSS} [%l]-[%p] %m%n
#記錄檔路徑
log4j.appender.day.File=C:\\system_notice.log
#隔日備份時按照日期更改記錄檔檔名
log4j.appender.day.DatePattern='.'yyyyMMdd

完工

沒有留言:

張貼留言

Related Posts Plugin for WordPress, Blogger...
 
© 2012. Design by Main-Blogger - Blogger Template and Blogging Stuff