Logback 은 Logger, Appender, Layout 의 세 가지 기본 클래스를 기반으로 한다.

이를 사용하여 개발자는 메시지 유형 및 수준에 따라 메시지를 기록하고 런타임에 이러한 메시지의 형식과 보고 위치를 설정할 수 있다.

Logger 클래스는 logback-classic 모듈에 속하고, Appender 및 Layout 인터페이스는 logback-core 에 속하기 때문에, logback-core 에는 logger 의 개념이 없다.



Logger Class


Logger 의 레벨인 TRACE, DEBUG, INFO, WARN, ERROR 는 ch.qos.logback.classic.Level 클래스에 정의된다.

Logger 레벨을 지정하지 않으면 상위 클래스에서 상속받게 되고, default 레벨은 DEBUG 이다.

레벨은 아래와 같으며, 지정된 레벨 이하의 메소드 호출은 기록되지 않는다.


TRACE < DEBUG < INFO < WARN < ERROR



Appenders Class


Appender 는 로그 출력 대상(목적지) 을 설정할 수 있다.

현재 Appender 대상은 console, files, Syslog, TCP Sockets, JMS, DB, JMS 및 원격 UNIX Syslog 데몬이 될 수 있다.



Layouts Class


Appender 와 관련하여 출력 형식을 사용자 정의 하는 것이 Layout 이다.

PatternLayout 을 사용하면 C 언어 printf 함수와 비슷한 변환 패턴에 따라 출력 형식을 지정할 수 있다.

예를 들어 "%-4relative [%thread] %-5level %logger{32} - %msg%n" 같은 패턴을 가진 PatternLayout 의 결과는 다음과 같다.


176  [main] DEBUG manual.architecture.HelloWorld2 - Hello world.
cs



Logging 파라미터


logger.debug("The new entry is "+entry+".");
logger.debug("The new entry is {}.", entry);
cs


위 debug 메소드의 결과는 같지만, 두 번째 debug 메소드가 첫 번째 debug 메소드 형식보다 성능면에서 30배 이상 좋다. 

파라미터 수 만큼 해당 자리에 {} 를 나열하고 이어서 콤마로 구분하여 파라미터를 나열하면 된다.


logger.debug("The new entry is {}. It replaces {}.", entry, oldEntry);
cs


배열도 사용 가능하다.


Object[] paramArray = {newVal, below, above};
logger.debug("Value {} was inserted between {} and {}.", paramArray);
cs



내부 동작


사용자가 info() 메소드를 호출할 때 Logback 처리 과정은 다음과 같다.


  1. 필터 체인
    로깅 요청시 TurboFilter 가 존재할 경우 호출되어, 특정 이벤트를 필터링 하여 다음의 응답과 함께 단계 이동한다.
    FilterReply.DENY 이면 Logging 요청 삭제, NEUTRAL 인 경우 2 단계 진행, ACCEPT 인 경우 3 단계 진행.

  2. 기본 선택 규칙 적용
    요청 레벨과 logger 레벨을 비교하여, 사용할 수 없으면 요청을 삭제하고 그렇지 않으면 다음 단계로 진행.

  3. LoggingEvent 객체 생성
    logger, level, message 같은 요청의 모든 파라미터를 포함하는 ch.qos.logback.classic.LoggingEvent 객체를 생성.

  4. Appenders 호출
    LoggingEvent 객체를 만든 후 AppenderBase 의 doAppend() 메소드를 호출하여, 사용자 정의 필터가 있는 경우 해당 필터를 호출.

  5. 출력 형식화 (Layout)
    appender 를 통해, LoggingEvent 인스턴스를 형식화하고 결과를 문자열로 반환.

  6. LoggingEvent 목적지로 보내기
    로깅 이벤트가 완전히 형식화된 후, 각 appender 에 의해 목적지로 전송.




WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

,