https://hochoon-dev.tistory.com/entry/JAVA-Logback-%EC%82%AC%EC%9A%A9%EB%B2%95
https://thinkwarelab.wordpress.com/2016/11/18/java%EC%97%90%EC%84%9C-logback%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EB%A1%9C%EA%B9%85logging-%EC%82%AC%EC%9A%A9%EB%B2%95/ ## logback 설정
로그를 남겨주는 라이브러리, log4j 와 비슷함
* 스프링 5 버전부터는 web.xml에서 log4j 리스너 설정이 불가능
* 3버전에서 이미 지원중지한다고 나왔었고, 4버전까지만 지원
https://www.devkuma.com/docs/logback/
java 1.8에서는 logback 버전을 1.2.x 버전을 사용
위 logback 버전과 맞춘 slf4j 버전은 1.7.x 버전
=====================================================================
<!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-core -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.2.12</version>
</dependency>
<!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-classic -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.12</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.slf4j/jcl-over-slf4j -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>1.7.36</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-nop -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-nop</artifactId>
<version>1.7.36</version>
</dependency>
=====================================================================
logback을 사용하기위해 제거해야 하며 제거하지 않을시에 오류 발생
=====================================================================
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${org.slf4j-version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>${org.slf4j-version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${org.slf4j-version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.15</version>
<exclusions>
<exclusion>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
</exclusion>
<exclusion>
<groupId>javax.jms</groupId>
<artifactId>jms</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.jdmk</groupId>
<artifactId>jmxtools</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.jmx</groupId>
<artifactId>jmxri</artifactId>
</exclusion>
</exclusions>
<scope>runtime</scope>
</dependency>-->
=====================================================================
경로 : src₩main₩resources₩logback.xml
main/resources 밑에 logback.xml 설정 파일 생성
- Logback에서 RollingFileAppender를 사용하여 하루마다 새로운 로그 파일을 생성
=====================================================================
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- Console Appender -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!-- Rolling File Appender -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>nhn-code-test.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>nhn-code-test-%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!-- Root Logger -->
<root level="info">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</root>
</configuration>
=====================================================================
위의 예제에서는 FILE Appender를 RollingFileAppender로 변경하였습니다.
그리고 rollingPolicy 요소를 추가하여 롤링 정책을 설정합니다.
TimeBasedRollingPolicy는 시간 기반 롤링을 수행하며, fileNamePattern 속성을 사용하여 로그 파일 이름 패턴을 지정합니다.
위의 예제에서는 logfile-%d{yyyy-MM-dd}.log로 지정하여 날짜별로 로그 파일이 생성되도록 설정하였습니다.
또한, maxHistory 속성을 사용하여 유지할 과거 로그 파일의 최대 개수를 지정할 수 있습니다.
위의 예제에서는 maxHistory를 30으로 설정하여 최근 30일치의 로그 파일을 유지합니다.
이렇게 설정을 변경하면 매일 새로운 날짜로 시작하는 로그 파일이 생성되며, 과거 로그 파일은 설정한 maxHistory 값에 따라 유지됩니다.
- 참고 링크
https://www.slf4j.org/codes.html##noProviders
=====================================================================
Placing one (and only one) of the many available providers such as slf4j-nop.jar slf4j-simple.jar, slf4j-reload4j.jar, slf4j-jdk14.jar or logback-classic.jar on the class path should solve the problem.
※ 번역
slf4j-nop.jar slf4j-simple.jar, slf4j-reload4j.jar, slf4j-jdk14.jar 또는 logback-classic.jar와 같은 사용 가능한 많은 제공자 중 하나만 클래스 경로에 배치하면 문제가 해결됩니다.
=====================================================================
- 오류메시지
=====================================================================
SLF4J: No SLF4J providers were found.
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See https://www.slf4j.org/codes.html##noProviders for further details.
=====================================================================
- 해결
slf4j-nop 라이브러리 추가
=====================================================================
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-nop</artifactId>
<version>2.0.7</version>
</dependency>
=====================================================================