본문 바로가기

Programing/Framework

logback - 사람이 보기 좋게 하기 위해 패딩(padding)을 넣자.

logback으로 로깅을 하고 있다.

레벨, 시간 ... 등의 순서인데, 이미 레벨은 5자리 패딩을 하고 있다.

왜냐하면 로깅 레벨은 WARN, INFO 같은 4자리 길이와 ERROR, FATAL 같은 5자리가 섞여있어서 패딩이 되어 있지 않다면 

WARN 2016-08-11 11:45:10.474 [http-bio-9020-exec-1] c.c.a.a.t.Te

WARN 2016-08-11 11:45:10.475 [http-bio-9020-exec-1] c.c.a.a.t.Te

WARN 2016-08-11 11:45:10.477 [http-bio-9020-exec-1] c.c.a.a.t.Te

ERROR 2016-08-11 11:45:10.477 [http-bio-9020-exec-12] c.c.a.a.t.Te

INFO 2016-08-11 11:45:10.505 [http-bio-9020-exec-1] c.c.o.i.web.

WARN 2016-08-11 11:45:10.948 [http-bio-9020-exec-1] c.c.a.a.t.Te

WARN 2016-08-11 11:45:12.294 [http-bio-9020-exec-12] c.c.a.a.t.Te

ERROR 2016-08-11 11:45:12.295 [http-bio-9020-exec-1] c.c.a.a.t.Te

WARN 2016-08-11 11:45:12.296 [http-bio-9020-exec-13] c.c.a.a.t.Te

WARN 2016-08-11 11:45:12.296 [http-bio-9020-exec-1] c.c.a.a.t.Te

WARN 2016-08-11 11:45:12.296 [http-bio-9020-exec-1] c.c.a.a.t.Te

WARN 2016-08-11 11:45:12.297 [http-bio-9020-exec-1] c.c.a.a.t.Te

WARN  2016-08-11 11:45:10.474 [http-bio-9020-exec-1] c.c.a.a.t.Te

WARN  2016-08-11 11:45:10.475 [http-bio-9020-exec-1] c.c.a.a.t.Te

WARN  2016-08-11 11:45:10.477 [http-bio-9020-exec-1] c.c.a.a.t.Te

WARN  2016-08-11 11:45:10.477 [http-bio-9020-exec-12] c.c.a.a.t.Te

INFO  2016-08-11 11:45:10.505 [http-bio-9020-exec-1] c.c.o.i.web.

WARN  2016-08-11 11:45:10.948 [http-bio-9020-exec-1] c.c.a.a.t.Te

WARN  2016-08-11 11:45:12.294 [http-bio-9020-exec-12] c.c.a.a.t.Te

ERROR 2016-08-11 11:45:12.295 [http-bio-9020-exec-1] c.c.a.a.t.Te

WARN  2016-08-11 11:45:12.296 [http-bio-9020-exec-13] c.c.a.a.t.Te

WARN  2016-08-11 11:45:12.296 [http-bio-9020-exec-1] c.c.a.a.t.Te

WARN  2016-08-11 11:45:12.296 [http-bio-9020-exec-1] c.c.a.a.t.Te

WARN  2016-08-11 11:45:12.297 [http-bio-9020-exec-1] c.c.a.a.t.Te

처럼 삐죽삐죽 보일 것이기 때문이다.


로그 패턴은 아래와 같다.

'%-5level %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %class{36}.%method:%line %msg%n'


그런데 위의 로그에서 스레드 표시하는 %thread 부분이 thread id가 어떤 것은 한 자리이고 어떤 것은 두 자리라서 줄이 안맞기 시작한다. 처음에는 %level처럼 길이로 패딩을 주려고

'%-5level %d{yyyy-MM-dd HH:mm:ss.SSS} [%-21thread] %class{36}.%method:%line %msg%n'

처럼 수정을 했는데,

WARN  2016-08-11 11:45:12.294 [http-bio-9020-exec-12] c.c.a.a.t.Te

ERROR 2016-08-11 11:45:12.295 [http-bio-9020-exec-1 ] c.c.a.a.t.Te

WARN  2016-08-11 11:45:12.296 [http-bio-9020-exec-13] c.c.a.a.t.Te

WARN  2016-08-11 11:45:12.296 [http-bio-9020-exec-1 ] c.c.a.a.t.Te

와 같이 []안의 내용이 비어보이는 현상이 있었다.


내가 원하는 것은 아래와 같은 형태이다.

WARN  2016-08-11 11:45:12.294 [http-bio-9020-exec-12] c.c.a.a.t.Te

ERROR 2016-08-11 11:45:12.295 [http-bio-9020-exec-1]  c.c.a.a.t.Te

WARN  2016-08-11 11:45:12.296 [http-bio-9020-exec-13] c.c.a.a.t.Te

WARN  2016-08-11 11:45:12.296 [http-bio-9020-exec-1]  c.c.a.a.t.Te


로그백 메뉴얼을 보다보니 그룹으로 패딩을 넣어주는 내요이 있었다.

http://logback.qos.ch/manual/layouts.html 의 Parentheses are special에 잘 나와 있다.

예)

%-30(%d{HH:mm:ss.SSS} [%thread]) %-5level %logger{32} - %msg%n


따라서 앞에서 %thread까지 그룹을 잡아서 패딩을 넣어주면 된다.

%-55('%-5level %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread]) %class{36}.%method:%line %msg%n'


참고로 이 기능은 버전 0.9.27부터 지원이 된다고 한다. 다행히 사용하고 있는 버전이 1.1.3이다.

ch.qos.logback:logback-core:1.1.3