티스토리 뷰
3) slf4j를 이용한 로그남기기
이전에 작성했던 guestbook 프로젝트의 LogInterceptor.java에 log4j를 추가합니다.
실습
pom.xml 파일에서 다음 부분을 수정합니다.
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> |
위의 부분을 아래와 같이 수정합니다. |
<!-- 로깅 관련 --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.25</version> </dependency>
<dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> </dependency>
<dependency> <groupId>org.slf4j</groupId> <artifactId>jcl-over-slf4j</artifactId> <version>1.7.25</version> </dependency>
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> <exclusions> <exclusion> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </exclusion> </exclusions> </dependency> |
resource폴더에 logback.xml 파일을 작성합니다.
<?xml version="1.0" encoding="UTF-8"?> <configuration scan="true" scanPeriod="30 seconds"> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <Pattern>%d{HH:mm} %-5level %logger{36} - %msg%n</Pattern> </encoder> </appender>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>/tmp/access.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>/tmp/access-%d{yyyy-MM-dd}.log</fileNamePattern> <maxHistory>30</maxHistory> </rollingPolicy>
<encoder> <Pattern>%d{HH:mm} %-5level %logger{36} - %msg%n</Pattern> </encoder> </appender>
<logger name="org.springframework" level="info"/> <logger name="kr.or.connect" level="debug"/>
<root level="debug"> <appender-ref ref="CONSOLE"/> <appender-ref ref="FILE"/> </root> </configuration> |
LogInterceptor.java를 아래와 같이 수정합니다.
package kr.or.connect.guestbook.interceptor;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
public class LogInterceptor extends HandlerInterceptorAdapter{ private Logger logger = LoggerFactory.getLogger(this.getClass());
@Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { // System.out.println(handler.toString() + " 가 종료되었습니다. " + modelAndView.getViewName() + "을 view로 사용합니다."); logger.debug("{} 가종료되었습니다. {} 를 view로 사용합니다.", handler.toString(), modelAndView.getViewName()); }
@Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // System.out.println(handler.toString() + " 를 호출했습니다."); logger.debug("{} 를 호출했습니다.", handler.toString()); return true; }
} |
로그가 파일로도 출력되는 것을 알 수 있습니다.
생각해보기
- 인터셉터를 이용하면 컨트롤러의 시작과 종료 시에 로그를 남길 수 있습니다. 이러한 인터셉터를 이용해서 컨트롤러 메소드의 실행 시간을 구하려면 어떻게 해야 할까요?
참고 자료
[참고링크] Logback Project
[참고링크] How to use logback
https://github.com/sonegy/how-to-use-logback
'부스트코스 웹 프로그래밍 > 6. 웹 앱 개발: 예약서비스 4' 카테고리의 다른 글
3. 파일 업로드 & 다운로드 - BE (2) (0) | 2019.08.13 |
---|---|
3. 파일 업로드 & 다운로드 - BE (1) (0) | 2019.08.13 |
2. 로깅 - BE (2) (0) | 2019.08.13 |
2. 로깅 - BE (1) (0) | 2019.08.13 |
1. 파일 업로드 - FE (2) (0) | 2019.08.13 |