Logging Framework, Logback
- Logback은 slf4j의 native 구현체
- Logback은 logback-core, logback-classic, logback-access 3개의 모듈로 구성
- core는 classic, access의 모듈
name
- Logger들은 이름 기반으로 생성
- LoggerFactory.getLogger(“NAME”)으로 Logger를 호출
- NAME에 대한 유일한 instance 반환, 여러번 호출해도 똑같은 객체
- 흔히 Class 객체 넘겨주면 ,PackageName + ClassName으로 구성
example.logback.level.Grandparents
example.logback.level.grandparents.Parents
example.logback.level.grandparents.parents.Children
...
private static final Logger logger = LoggerFactory.getLogger(Grandparents.class);
private static final Logger logger = LoggerFactory.getLogger(Parents.class);
private static final Logger logger = LoggerFactory.getLogger(Children.class);
...
// 각각 클래스마다 구현
public void run() {
logger.trace("trace");
logger.debug("debug");
logger.info("info");
logger.warn("warn");
logger.error("error");
}
위처럼 Class GrandParents, Parents, Children을 위와 같은 구조로 생성하고 아래처럼 Logger를 Class 마다 생성하면 3개의 Logger가 Full Package+ClassName으로 생성됨
Level
- Logger들은 Tree Hierarchy 구조로 Level을 적용 받을 수 있음
LogBack.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%d{HH:mm} %-5level %logger{36} - %msg%n</Pattern>
</layout>
</appender>
<logger name="example.logback.level.grandparents" level="TRACE"/>
<logger name="example.logback.level.grandparents.parents.children" level="INFO"/>
<root level="DEBUG">
<appender-ref ref="STDOUT" />
</root>
</configuration>
여기서 root는 root logger를 말한다.
Level
- trace
- debug
- info
- warn
- error
- 위 처럼 5단계의 Level 이 존재하고, Trace 선언을 하면 trace 밑으로 debug, info, warn, error 등 모든 level을 포함
- INFO로 설정되면 info, warn, error 포함
Appender
- Event 마다 log를 기록하는 기능은 Appender가 처리
- Logger는 어떤 Appender에 할당되어 처리 되는지가 중요
- Appender를 설정하더라도 Log 출력에 해당되지 않으면 작동하지 않음
- Appender는 출력될 형식을 직접 가지고 있지 않고, Layout과 Encoder에 위임
- ConsoleAppender, FileAppender, RollingFileAppender
Configuration
- LogBack이 구동될때 LogBack 설정 - LogBack.xml