카테고리 없음

Spring Interceptor 사용자 로그 기록 파일로 만들기(요청 URI log4j )

솔솔하네 2022. 9. 21. 09:17
반응형

회사에서 신입프로젝트를 진행하고 있는데

Spring Interceptor를 사용해서 사용자 로그남기기 라는 요청사항이 있었습니다.

이 기능을 만들면서 로그기록을 파일로도 만들 수 있는 것같길래 열심히 뚝딱뚝딱 만들어봤습니다.

 

 


1. 우선 'interceptor'패키지를 만들고 그 안에 interceptor 클래스를 하나 만듭니다.

 

2. 'interceptor  클래스'는 'HandlerInterceptor'를 상속 받게 작성합니다.

(초심자 Tip. 'HandlerInterceptor'는 따로 만들 필요無!! Java 자체에 있는 Class입니다.)

(HandlerInterceptor등 자세한 설명은 https://velog.io/@hkoo9329/%EC%9E%90%EB%B0%94-extends-implements-%EC%B0%A8%EC%9D%B4 블로그 참고하시면 좋을 거 같습니다.)

public class Interceptor implements HandlerInterceptor {
	
		return true;
	}

 

3. 'preHandle' 매소드를 @Override 한 후 안에 기능을 재정의 해줍니다.

public class Interceptor implements HandlerInterceptor {
	
	private static final Logger logger = LoggerFactory.getLogger(Interceptor.class);
	
	@Override
	public boolean preHandle(HttpServletRequest req, HttpServletResponse res, Object handler)
			throws Exception {
		
		HttpSession session = req.getSession();

         logger.info("=======================================================");
         logger.info(" <Request URI : " + req.getRequestURL() + ">");
         logger.info("=======================================================");

		
		return true;
	}

 

4. src/main/resources 하위에 있는 log4j.xml 파일을 엽니다.

 

5. log4j.xml에 로그가 기록될 때 그 로그기록을 파일로 만드는 어뎁터 장착하기.

   (파일로 기록하는 방법이 몇 가지가 있는데 따로 찾아보세요! 저는 날짜별로 파일을 만들게 했습니다.)

	<!-- DailyFile Appenders -->
	<appender name="dailyFileAppender" class="org.apache.log4j.DailyRollingFileAppender">
		<param name="File" value="{파일이 저장될경로 작성하기}\\output.log"/>
		<param name="Append" value="true"/>
		<layout class="org.apache.log4j.PatternLayout">
			<param name="DatePattern" value="'.''yyyy-MM-dd'"/>
			<param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss}][%-5p] %c - %m%n" />
		</layout>
	</appender>

 

6.  <root>태그 안에 방금 작성한 어뎁터 추가합니다.

('<appender-ref ref="dailyFileAppender" />'  코드 추가)

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

7. sevelet-context.xml에서 아래 코드를 추가해 인터셉터를 설정한다.

	<!-- 인터셉터 설정 -->
	<beans:bean id="interceptor" class="{Interceptor클래스 PATH적기}"/>
	
	<interceptors>
		<interceptor>
			<mapping path="/*"/>
			<beans:ref bean="interceptor"/>
		</interceptor>
	</interceptors>

 

8. 다 작성 후 서버를 돌리고 console.창에 보면 아래와 같이 로그가 찍힌다.

 

9. 'dailyFileAppender'어뎁터 작성시 지정한 path로 가면 아래와 같이 파일이 만들어짐.

 

10. 파일을 열어보면 'dailyFileAppender'어뎁터 작성시 지정한 패턴대로 기록 되있는걸 볼 수 있음.

 

11. 참고로 몇일 전에 만들어서 사용했더니 아래와 같이 날짜별로 로그파일이 만들어진걸 볼 수 있음.