Spring Interceptor 사용자 로그 기록 파일로 만들기(요청 URI log4j )
회사에서 신입프로젝트를 진행하고 있는데
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. 참고로 몇일 전에 만들어서 사용했더니 아래와 같이 날짜별로 로그파일이 만들어진걸 볼 수 있음.