본 문서는 https://logback.qos.ch/manual/introduction.html을 번역/요약/정리/사견 추가한 글입니다.
1. Encoder는 뭘까?
Encoder는 로깅 이벤트를 byte array로 변환하고 이를 OutputStream에 쓰는 역할을 합니다. Encoder는 logback 0.9.19 버전부터 추가된 기능입니다. 그 전엔 layout을 사용해 똑같은 기능을 처리했습니다.
그럼 왜 이런 변화가 발생했을까요? 바로바로 layout은 이벤트를 문자열로밖에 바꾸지 못하기 때문입니다. 거기에 더해 layout은 언제 이벤트를 쓸지에 대한 것을 모르기 때문에 이벤트를 모아 배치로 처리하는 방법도 사용하지 못합니다.
요즘은 PatternLayoutEncoder가 거의 유일하게 유용한 encoder입니다. 이 클래스는 그저 PatternLayout을 감싸기만 하긴 합니다.
2. Encoder interface
Encoder는 이벤트를 byte array로 바꾸고 자신이 속해있는 appender에 관리되는 OutputStream에 언제 바이트를 쓸지를 컨트롤합니다. 따라서 이와 관련된 init(OutputStream os), doEncode(E event), close() 3개의 메소드만 구현하면 됩니다.
3. LayoutWrappingEncoder
LayoutWrappingEncoder는 encoder와 layout 사이의 간극을 메워줍니다. 이 클래스는 encoder 인터페이스를 구현하고 layout을 감쌉니다. 이렇게 함으로써 layout의 doLayout의 결과물인 문자열을 byte array로 바꾸고 OutputStream에 쓰게 해줍니다.
4. PatternLayoutEncoder
PatternLayout이 가장 일반적으로 사용되는 layout이 되면서 PatternLayoutEncoder가 등장하게 됐습니다.
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>foo.log</file>
<encoder>
<pattern>%d %-5level [%thread] %logger{0}: %msg%n</pattern>
<outputPatternAsHeader>true</outputPatternAsHeader>
</encoder>
</appender>
다음과 같은 패턴을 통해 로그를 남길 수 있습니다. outputPatternAsHeader는 파일의 가장 처음 부분에 패턴을 명시해줍니다. 아래는 그 예입니다.
#logback.classic pattern: %d [%thread] %-5level %logger{36} - %msg%n
2012-04-26 14:54:38,461 [main] DEBUG com.foo.App - Hello world
2012-04-26 14:54:38,461 [main] DEBUG com.foo.App - Hi again ...
'Log > Logback Manual' 카테고리의 다른 글
Chapter 7. logback filter (0) | 2022.10.05 |
---|---|
Chapter 6. logback layouts (0) | 2022.10.03 |
Chapter 4. logback appenders (0) | 2022.10.02 |
Chapter 3. logback 설정 (0) | 2022.10.02 |
Chapter 2: logback 구조 (0) | 2022.10.01 |