티스토리 뷰

 

 

11.3.2 HandlerInterceptor를 사용하여 로그 기록하기

 

pom.xml

      <!-- Logging -->
      <dependency>
         <groupId>org.slf4j</groupId>
         <artifactId>slf4j-api</artifactId>
         <version>${org.slf4j-version}</version>
      </dependency>
      <dependency>
         <groupId>org.slf4j</groupId>
         <artifactId>jcl-over-slf4j</artifactId>
         <version>${org.slf4j-version}</version>
         <scope>runtime</scope>
      </dependency>
      <dependency>
         <groupId>org.slf4j</groupId>
         <artifactId>slf4j-log4j12</artifactId>
         <version>${org.slf4j-version}</version>
         <scope>runtime</scope>
      </dependency>
      <dependency>
         <groupId>log4j</groupId>
         <artifactId>log4j</artifactId>
         <version>1.2.15</version>
         <exclusions>
            <exclusion>
               <groupId>javax.mail</groupId>
               <artifactId>mail</artifactId>
            </exclusion>
            <exclusion>
               <groupId>javax.jms</groupId>
               <artifactId>jms</artifactId>
            </exclusion>
            <exclusion>
               <groupId>com.sun.jdmk</groupId>
               <artifactId>jmxtools</artifactId>
            </exclusion>
            <exclusion>
               <groupId>com.sun.jmx</groupId>
               <artifactId>jmxri</artifactId>
            </exclusion>
         </exclusions>
         <scope>runtime</scope>
      </dependency>

 

 

 

 

log4j.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" 
	"http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">



	<!-- Appenders -->
	<appender name="console" class="org.apache.log4j.ConsoleAppender">
		<param name="Target" value="System.out" />
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n"  />
		</layout>
	</appender>
	
	
	 <!-- 파일에 출력하기 -->
    <appender name="monitor" class="org.apache.log4j.RollingFileAppender">  
        <param name="append" value="false" />  
        <param name="maxFileSize" value="10KB" />  
        <param name="maxBackupIndex" value="5" />  
        <param name="file" value="c:/logs/monitor.log" />  
        <layout class="org.apache.log4j.PatternLayout">  
            <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" /> 
        </layout> 
        <filter class="org.apache.log4j.varia.LevelRangeFilter">  
            <param name="LevelMin" value="info" />  
            <param name="LevelMax" value="info" />  
        </filter>  
    </appender>  
    
    
     <appender name="audit" class="org.apache.log4j.RollingFileAppender">  
        <param name="append" value="false" />  
        <param name="maxFileSize" value="10KB" />  
        <param name="maxBackupIndex" value="5" />  
        <param name="file" value="c:/logs/audit.log" />  
        <layout class="org.apache.log4j.PatternLayout">  
            <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />  
        </layout>  
        <filter class="org.apache.log4j.varia.LevelRangeFilter"> 
            <param name="LevelMin" value="warn" />  
            <param name="LevelMax" value="warn" />  
        </filter> 
    </appender>  
    
	<!-- Application Loggers -->
	<logger name="com.springmvc">
		<level value="info" />
		<appender-ref ref="monitor" />
		 <appender-ref ref="audit" />
	</logger>
	
	<!-- 3rdparty Loggers -->
	<logger name="org.springframework.core">
		<level value="info" />
	</logger>
	
	<logger name="org.springframework.beans">
		<level value="info" />
	</logger>
	
	<logger name="org.springframework.context">
		<level value="info" />
	</logger>

	<logger name="org.springframework.web">
		<level value="info" />
	</logger>

	<!-- Root Logger -->
	<root>
		<priority value="warn" />
		<appender-ref ref="console" />
	</root>
	
</log4j:configuration>

 

 

 

MonitoringInterceptor.java

package com.springmvc.interceptor;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.StopWatch;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

public class MonitoringInterceptor implements HandlerInterceptor
{
   ThreadLocal<StopWatch> stopWatchLocal = new ThreadLocal<StopWatch>();
   
   public Logger logger = LoggerFactory.getLogger(this.getClass());

   @Override
   public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
         throws Exception 
   {
      StopWatch stopWatch = new StopWatch(handler.toString());
      stopWatch.start(handler.toString());
      stopWatchLocal.set(stopWatch);
      logger.info("접근한 URL 경로 : " + getURLPath(request));
      logger.info("요청 처리 시작 시각 : " + getCurrentTime());
      return true;
   }

   @Override
   public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
         ModelAndView modelAndView) throws Exception 
   {
      logger.info("요청 처리 종료 시각 : " + getCurrentTime());
   }

   @Override
   public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
         throws Exception 
   {
      StopWatch stopWatch = stopWatchLocal.get();
      stopWatch.stop();
      logger.info("요청 처리 소요 시각 : " + stopWatch.getTotalTimeMillis()+" ms");
      stopWatchLocal.set(null);
      logger.info("=======================================");
   }
   private String getCurrentTime()
   {
      DateFormat formatter = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
      Calendar calendar = Calendar.getInstance();
      calendar.setTimeInMillis(System.currentTimeMillis());
      
      return formatter.format(calendar.getTime());
      
   }

   private String getURLPath(HttpServletRequest request) 
   {
      String currentPath = request.getRequestURI();
      String queryString = request.getQueryString();
      queryString = queryString == null ? "" : "?" + queryString;
      return currentPath + queryString;
   }
   
}

 

 

servlet-context.xml

   	<interceptors>
		<beans:bean class="com.springmvc.interceptor.MonitoringInterceptor"/>
   	</interceptors>

 

 

 

 

 

 

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday