지금부터 작성하는 로깅은 reference 문서를 꼭 참조해 보도록 하자. Logging reference
우선 로깅 퍼사드와 로거의 차이점을 알아보자.
Logging Facade(로깅 퍼사드) :
- 로거 API를 추상화해둔 interface이다.
- 로거 선택을 자유롭게 하기 위해 사용한다.
- 보통 로깅 퍼사드를 통해 로그를 기록한다.
ex) Commons Logging, SLF4j
로거 :
- 실제 로그를 기록하는 구현체이다.
ex) JUL, Log4J2, Logback
보통 어플리케이션을 개발하면 로깅 퍼사드를 통해 로거를 사용하게 된다.
스프링 부트에서는 기본 적으로 Commons Logging를 사용하게 되는데 내부 적으로 Spring-JCL의 개입을 통해 Commons Logging이 SLF4j를 SLF4j가 Logback를 호출하게 된다.
결과적으로 스프링의 로그는 Logback이 기록하게 된다.
Commons Logging , SLF4j -> Logback
아래 Maven 항목을 살펴보면
jul-to-slf4j, log4j-to-slf4j와 같이 결국 slf4j를 호출하게 되고 slf4j-api를 통해 logback을 이용하는 것을 확인할 수 있다.
이제 로그 내용을 확인해 보자
아래 로그는 doc 문서에서 내용을 가져왔다. Log Format
2014-03-05 10:57:51.112 INFO 45469 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/7.0.52
2014-03-05 10:57:51.253 INFO 45469 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2014-03-05 10:57:51.253 INFO 45469 --- [ost-startStop-1] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 1358 ms
2014-03-05 10:57:51.698 INFO 45469 --- [ost-startStop-1] o.s.b.c.e.ServletRegistrationBean : Mapping servlet: 'dispatcherServlet' to [/]
2014-03-05 10:57:51.702 INFO 45469 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
로그 형식은 아래 순서대로 표기된다.
1. 날짜
2. log level - ERROR, WARN, INFO, DEBUG, or TRACE
3. Process ID
4. --- : 구분 문자열
5. 쓰레드 이름
6. 로거 이름, 보통 class파일의 경로를 나타낸다
이번에는 로그에 색을 입혀 보자.
properties파일과 같은 설정 파일에서 아래 항목을 지정해주면 된다.
값은 always, detect, never를 사용할 수 있다. 내용은 문서를 참조하자.
Spring.output.ansi.enabled=always
로그 내용을 별도의 파일에 기록해보겠다.
아래와 같이 path 또는 file의 값을 지정하여 로그 기록 방식과 로그를 기록할 대상을 결정하게 된다.
logging.path={디렉토리}
logging.file={파일이름}
'logging.path=logs'와 같이 지정하게 되면 해당 디렉토리에 spring.log 파일을 생성하여 로그를 기록하게 된다.
기본적으로 로그 파일이 10MB가 되면 rotate 되며 'logging.file.max-size' 프로 퍼티를 지정하여 max 사이즈를 지정할 수 있다. 또한 'logging.file.max-history' 프로퍼티를 이용하여 기록할 파일의 기간을 지정 가능하다.
logging.file.max-history=
logging.file.max-size=
File Output 레퍼런스
패키지 별로 로그 레벨을 지정해 보자.
정확하게는 class에 생성된 로거의 레벨을 지정하는 것이다.
아래와 같이 'logging.level.<logger-name>=<level>' 형태로 지정하면 된다.
logging.level.<logger-name>=<level>
logging.level.root=WARN
logging.level.org.springframework.web=DEBUG
logging.level.org.hibernate=ERROR
예를 들어 이전 포스팅에서 생성한 SampleRunner.java에서 로거를 생성해 보자
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Component
public class SampleRunner implements ApplicationRunner {
private Logger logger = LoggerFactory.getLogger(SampleRunner.class);
@Autowired
private String hello;
@Autowired
private MyProperties myProperties;
@Override
public void run(ApplicationArguments args) throws Exception {
logger.warn("============================");
logger.info(hello);
logger.debug(myProperties.getName());
logger.info(myProperties.getFullName());
logger.warn("============================");
}
}
SLF4j를 이용한 로거를 생성하고 logger를 이용하여 warn, info, debug 등의 level로 로깅을 해 보았다.
이제 이 클래스를 property에 지정해 보자.
my.name = hongjun
Spring.output.ansi.enabled=always
logging.path=logs
logging.level.com.hongjun423.springinit=DEBUG
로깅 level을 DEBUG로 지정하였으므로 모든 로그가 기록될 것이다.
다음은 결과 화면이다.
Log Level에 관한 문서도 한번 읽어보자.
링크
해당 포스팅은 백기선님의 인프런 강좌를 참고하여 작성하였습니다.
'Java & 스프링 > 스프링부트 톺아보기' 카테고리의 다른 글
[스프링 부트] 로깅 - Log4j 사용 하기 (0) | 2019.10.07 |
---|---|
[스프링 부트] 로깅 - Logback 커스텀 설정 파일 사용 하기 (0) | 2019.10.07 |
[스프링 부트] 프로파일 (0) | 2019.10.03 |
[스프링 부트] 외부 설정 적용하기(2) (0) | 2019.09.25 |
[스프링 부트] 외부 설정 적용 하기 (0) | 2019.09.24 |
댓글