250x250
Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- git
- MSSQL
- jpa
- error
- STS
- ubuntu
- PostgreSQL
- JavaScript
- myBatis
- IntelliJ
- maven
- Tomcat
- Thymeleaf
- Spring Boot
- oracle
- JDBC
- Exception
- Core Java
- AJAX
- Source
- Open Source
- 설정
- 문서
- Python
- SpringBoot
- spring
- Eclipse
- MySQL
- 오픈소스
- Docker
Archives
- Today
- Total
헤르메스 LIFE
[SpringBoot] Logback 설정 본문
728x90
Inteceptor 에서 Log를 찍고 싶은데, 찍을 수가 없습니다.
logback.xml 은 정상적으로 Log가 찍힙니다. 하지만 logback의 확장기능을 사용하고 싶어서 포기가 안되네요.
package com.study.wings.interceptor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@Component
public class AuthInterceptor implements HandlerInterceptor {
private static Logger logger = LoggerFactory.getLogger( AuthInterceptor.class);
public boolean isInstance( Object handler, Class<?> clazz ) {
if( !( handler instanceof HandlerMethod ) ) {
return false;
}
Object object = ( (HandlerMethod)handler ).getBean();
if( clazz.isInstance( object ) ) {
return true;
}
return false;
}
@Override
public boolean preHandle( HttpServletRequest request, HttpServletResponse response, Object handler ) throws Exception {
// 1. handler 종류 확인
// Controller에 있는 메서드이므로 HandlerMethod 타입인지 체크
if( !( handler instanceof HandlerMethod ) ) {
// return true이면 Controller에 있는 메서드가 아니므로, 그대로 컨트롤러로 진행
return true;
}
String targetURI = request.getServletPath();
StringBuilder sb = new StringBuilder();
// request 정보
sb.append( "\n[preHandle] <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<" );
sb.append( "\n#remoteIp : " ).append( request.getRemoteAddr() );
sb.append( "\n#targetURI : " ).append( targetURI );
sb.append( "\n#reqUrl : " ).append( request.getRequestURL().toString() );
sb.append( "\n#userAgent : " ).append( request.getHeader( "User-Agent" ) );
sb.append( "\n<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<" );
logger.debug( sb.toString() );
// session 객체를 가져옴
HttpSession session = request.getSession();
// login처리를 담당하는 사용자 정보를 담고 있는 객체를 가져옴
Object obj = session.getAttribute("login");
if ( obj == null ){
// 로그인이 안되어 있는 상태임으로 로그인 폼으로 다시 돌려보냄(redirect)
response.sendRedirect("/login.do");
return false; // 더이상 컨트롤러 요청으로 가지 않도록 false로 반환함
}
return true;
}
}
logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!--Environment 내의 프로퍼티들을 개별적으로 설정할 수도 있다.-->
<springProperty scope="context" name="LOG_LEVEL" source="logging.level.root"/>
<!-- pattern -->
<property name="LOG_PATTERN"
value="%-5level %d{yy-MM-dd HH:mm:ss}[%thread] [%logger{0}:%line] - %msg%n"/>
<!-- Console Appender -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${LOG_PATTERN}</pattern>
</encoder>
</appender>
<logger name="com.study.wings.interceptor" level="debug" >
<appender-ref ref="CONSOLE"/>
</logger>
<!-- root 레벨 설정 -->
<root level="${LOG_LEVEL}">
<appender-ref ref="CONSOLE"/>
</root>
</configuration>
logback.xml 설정 파일은 너무 빨리 로딩되기 때문에, extension을 사용하기 어렵습니다. 그러므로 logging.conifg를 정의해서 logback-spring.xml 을 사용해야 합니다.
logging.config=classpath:logback-spring.xml 로 지정을 해주어야 합니다.
# Logback 설정
logging.level.root=info
logging.config=classpath:logback-spring.xml
spring.output.ansi.enabled=ALWAYS
728x90
'Spring Boot Framework' 카테고리의 다른 글
[Spring Boot] STS 를 이용한 Spring Boot 개발환경 테스트 (0) | 2022.02.10 |
---|---|
[SpringBoot] JPA Entity 생성 테스트 (0) | 2021.12.01 |
[SpringBoot] Interceptor (0) | 2021.07.28 |
[SpringBoot] SpringBoot 기반 Web Project 생성 (1) | 2021.07.27 |
[Spring Boot] Spring Resttemplate 예외 처리 (0) | 2021.01.31 |