일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- AJAX
- Python
- Eclipse
- maven
- Thymeleaf
- JDBC
- IntelliJ
- jpa
- Core Java
- myBatis
- PostgreSQL
- Source
- Tomcat
- JavaScript
- Spring Boot
- git
- 문서
- error
- Open Source
- oracle
- Docker
- STS
- spring
- 설정
- MySQL
- MSSQL
- Exception
- 오픈소스
- SpringBoot
- ubuntu
- Today
- Total
헤르메스 LIFE
[Spring Boot] SLF4J를 이용한 Log 설정 시 주의점 본문
출처 : 백기선님의 강의 www.youtube.com/watch?v=o2-JaRD9qQE&t=907s&ab_channel=springcamp.io
1. 중요 !!!
- SLF4J ( Simple Logging Facade for Java ) 는 Interface 입니다.
- Spring Boot 은 기본적으로 JCL ( Jakarta Common Logging ) 을 이용해서 Logging 코드를 생성할 수 있습니다.
- Spring Boot Application은 Logback을 이용한 SLF4J를 사용합니다.
- 다른 Logging 라이브러리를 사용할 수 있습니다. ( 각 Log API 라이브러리와의 의존성을 끊어줘야 합니다. )
2. SLF4J 구현체
slf4j-log4j12-{version}.jar : Log4j 1.x 를 이용해 Logging 하기위한 라이브러리 slf4j-jdk14-{version}.jar : JDK1.4 ( java.util.logging 또는 JUL )를 이용해 Logging 하기위한 라이브러리 slf4j-nop-{version}.jar : nop 를 이용해 Logging 하기위한 라이브러리 slf4j-jcl-{version}.jar : JCL ( Jakarta Common Logging ) 을 이용해 Logging 하기위한 라이브러리 logback-classic-{logback-version}.jar : Logback을 이용해 Logging 하기위한 라이브러리 |
※ 여기 구현체들을 라이브러리 Path에 전부 넣어두면 설정에 맞게, 구현체를 찾아서 아무거나 실행된다. 예를 들어 log4j 설정도 있고, logback 설정도 존재하고 한다면 둘 중 하나가 무작위로 수행 될 수 있기때문에 주의 해야 합니다.
- 사실 이 구문이 가장 중요한것 같습니다. 프로젝트 설정 시 복붙하다보면 있는데로 붙여넣게 되는데.. 필요없는 라이브러리가 포함되고, 또 그게 어떤 동작을 하는지도 잘몰라서 그냥 놔둬야 했는데, 로그는 이제 그 사용을 이해할 수 있었습니다.
3. SLF4J 를 사용할 수 있도록 Bridge 해주는 라이브러리
jcl-over-slf4j.jar - JCL 호출을 SLF4J 로 연결하는 라이브러리 - 설정 시 common-logging.jar 제거 - slf4j-jcl.jar 와 같이 사용하면 안됨. ( 무한루프 ) log4j-over-slf4j.jar -Log4j 호출을 SLF4J 로 연결하는 라이브러리 - 설정 시 log4j.jar 제거 - slf4j-log4j12.jar 와 같이 사용하면 안됨. ( 무한루프 ) jul-to-slf4j.jar - java.util.logging 은 교체 불가능 - LogRecord 객체를 사용해서 위임 - slf4j-log4j12.jar 와 같이 사용하면 안됨. ( 무한루프 ) |
4. 무한루프의 원리
1. log4j API 를 호출하면 -> 2. 모든 logging은 가짜 Log4j 인 Bridge를 호출하고 -> 3. Bridge 는 SLF4J API 를 호출하고 -> 4. SLF4J 는 Binding 을 통해서 Log4j 를 호출한다. |
5. logback 만을 호출하도록 하는 방법 ( 2015년 동영상이라.. ㅡㅡㅋ )
1. logbak 을 제외한 모든 Bridge 라이브러리를 넣어준다. 2. 모든 Log api 호출은 SLF4J 를 호출하고 3. SLF4J 는 Logback 만을 호출한다. |
SLF4J 는 Interface 이기때문에 구현체를 이용해서 Logging 하게 됩니다. 이때 SLF4J Binding를 이용합니다.
6. Spring Boot 에서 구현체를 찾는 순서
1. 설정파일찾기 |
※ 참고
예전 JCL 은 debug 모드일 경우만 사용할 수 있도록 if 문으로 감쌌었습니다.
if ( logger.isDebugEnabled()) {
logger.debug("..................");
}
Log4j를 사용하면서 if 를 제거 해도 성능 상 문제되지 않습니다.
logger.debug("{}", "................");
'Spring Framework' 카테고리의 다른 글
[Spring Boot] springboot 에서 jsp-config include 사용 (0) | 2021.01.11 |
---|---|
[Spring Boot] 커스텀 로그 설정 logback 스프링 프로파일 사용 (0) | 2021.01.09 |
[Spring] Filter & HandlerInterceptor와 AOP의 차이점 (0) | 2021.01.09 |
[Spring] Spring MVC의 라이프사이클 (0) | 2021.01.09 |
[SpringBoot] 스프링 부트 스타터 프로젝트 옵션들 (0) | 2021.01.03 |