Servlet過濾器——日志記錄過濾器


1.概述

    在實際的項目開發過程中,經常需要在項目運行時,記錄並在控制台中輸出運行時的日志信息,便於查看項目的運行狀況。本實例將介紹如何應用過濾器實現日志記錄。運行本實例,將在控制台中輸出項目運行時的日志信息。

 

2.技術要點

本實例主要應用Apache的Log4j組件輸出日志信息。該組件主要用於日志管理。Logger是Log4j的日志記錄器,它是Log4j的核心組件。

在程序中可以使用Logger類的不同方法來輸出各種級別的日志信息,Log4j會根據配置的當前日志級別決定輸出哪些日志。對應各種級別日志的輸出方法如下:

(1)DEBUE日志可以使用Logger類的debug()方法輸出日志消息。

語法如下:

logger.debug(Object message)

message:輸出的日志消息,例如“logger.error("調試日志")”。

(2)INFO日志可以使用Logger類的debug()方法輸出日志消息。

語法如下:

logger.info(Object message)

message:輸出的日志消息,例如“logger.error("消息日志")”。

(3)WARN日志可以使用Logger類的info()方法輸出日志消息。

語法如下:

logger.warn(Object message)

message:輸出的日志消息,例如“logger.error("警告日志")”。

(4)ERROR日志可以使用Logger類的warn()方法輸出日志消息。

語法如下:

logger.error(Object message)

message:輸出的日志消息,例如“logger.error("數據庫連接失敗")”。

(5)FATAL日志可以使用Logger類的fatal()方法輸出日志消息。

語法如下:

logger.fatal(Object message)

message:輸出的日志消息,例如“logger.fatal("內存不足")”。

 

3.具體實現

(1)創建日志Filter實現類LogFilter.java主要是在初次調用時開始記錄,執行時獲取訪問的URI和執行前的時間,關鍵代碼如下:

public class LogFilter implements Filter {
      private Log log = LogFactory.getLog(this.getClass());
      private String filterName;
      public void init(FilterConfig config) throws ServletException {
            filterName = config.getFilterName();//獲取 Filter的 name,啟動Filter
            log.info("啟動 Filter: " + filterName);//
      }
      public void doFilter(ServletRequest req, ServletResponse res,FilterChain chain)
                   throws IOException, ServletException {
            HttpServletRequest request = (HttpServletRequest) req;
            HttpServletResponse response = (HttpServletResponse) res;
            long startTime = System.currentTimeMillis();                                   //運行前的時間
            String requestURI = request.getRequestURI();                                   //獲取訪問的URI
            requestURI = request.getQueryString() == null ? requestURI                    //所有的地址欄參數對比
                        : (requestURI + "?" + request.getQueryString());
            chain.doFilter(request, response);
            long endTime = System.currentTimeMillis();
            //消耗的總時間
            log.info(request.getRemoteAddr() + " 訪問了 " + requestURI + ", 總用時 "+ (endTime - startTime) + " 毫秒。");
      }
      public void destroy() { //銷毀時記錄日志
      }
}

(2)使用日志記錄需要commons-logging的Log4j來輸出日志,本例輸出格式如下:

og4j.rootLogger=INFO, A1
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,SSS} [%l]-[%p] %m%n

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM