Logback은 Java에서 가장 많이 사용되는 logging framework 이다.
Log4j의 후속 버전으로 새롭게 만든 Logging 라이브러리이며, slf4j API를 구현하므로 다른 logging framework와 logback 간에 쉽게 전환이 가능하다.
Log4j1.x와 Logback비교시 Logback 장점
- log4j 보다 메모리 점유도 작고, 성능도 10배 이상 향상
- log4j는 로그레벨 변경시 서버 재기동이 필요하지만 logback은 내부 스캐닝을 통해 자동으로 로드 가능
- 로그 파일 롤링시 설정을 통해서 주기적으로 파일 자동삭제
- log4j 보다 많은 필터링 기능 제공
Logback구조
logback은 Logger, Appender, Layout 3가지 구성요소가 있다.
Logger class 는 logback-classic
의 모듈 이고, Appender 및 Layout interfaces 는 logback-core
부분 입니다.
- Logger : 어플리케이션이 로그 메세지를 작성하기 위해 사용하는 클래스
- Appender : 설정해 놓은 위치에 로그 메세지를 저장
- Layout: 메세지를 출력할 준비 ( 참고 URL : https://logback.qos.ch/manual/layouts.html )
Log 레벨
설정파일 (순서대로 높은 우선순위를 가짐)
- logback.groovy
- logback-test.xml
- logback.xml
Maven Dependency
logback classic에 core가 종속되어있어서 따로 추가 안 해도 된다.1
2
3
4
5<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
기본 구성
logback.xml 파일을 만들어 src\main\resources에 추가 한다.
1
2
3
4
5
6
7
8
9
10
11<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="debug">
<appender-ref ref="STDOUT" />
</root>
</configuration>
테스트를 하기 위해서 main 메서드를 가진 클래스를 생성1
2
3
4
5
6
7
8public class Logback {
private static final Logger logger = LoggerFactory.getLogger(Logback.class);
public static void main(String[] args) {
logger.info("log Example {}", Logback.class.getSimpleName());
}
}
1 | 23:15:16.425 [main] INFO Logback - log Example Logback |
기본 구성을 살펴보면
class="ch.qos.logback.core.ConsoleAppender"
클래스 이름을 참조하는name="STDOUT"
name을 가진appender
가 있다.- 로그 메세지 출력 형식의
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
을 확인 할수 있다. - root 태그는 debug 모드로 설정하고,
STDOUT
을 가진appender
를 참조한다. - Logger 를 만들고
logger.info()
메소를 통해 메세지가 출력되는지 결과화면으로 확인한다.
설정 옵션
configuration
설정 파일 수정시 자동으로 로드 ( scanPeriod=”30 seconds“ -> 설정파일 수정을 30초마다 스캔, default=1분 )1
2
3<configuration scan="true" scanPriod="30 seconds">
...
<configuration>
Logger
name="me.logback.level"
이하 모든 Logger들의 level은 DEBUG라는 설정1
<logger name="me.logback.level" level="DEBUG"/>
additivity : name="me.logback.level"
이하 패키지는 모두 적용되지만, false 값으로 설정시 name에만 logger 가 적용된다.1
<logger name="me.logback.level" level="DEBUG" additivity="false"/>
Appender
- ConsoleAppender
1 | <!-- "CONSOLE" name 을 가진 appender 설정 --> |
- RollingFileAppender
1 | <appender name="ROLLING-FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> |
파일 생성 결과 화면
logback.xml 샘플
1 |
|