Child pages
  • lilith 를 사용하여 logback 으로 기록한 log message 를 Network 으로 전달 및 취합


Lilith 는 logback 의 로그 메시지를 네트웍으로 전달하고 전용 viewer 를 통해 event 나 level 등으로 구분하여 볼 수 있는 유틸리티이다. Chainsaw 와 비슷한 역할을 하며 차이점은 Lilith 는 더 고성능이며 대용량의 log 파일을 다룰수 있다고 한다.

개인적으로 로깅 시스템은 slf4j 를 기반으로 하여 logback 만 사용하므로 logback 에서 사용 방법만 정리해 본다.


logback-classic SocketAppender 와 사용

Lilith 는 logback-classic의 SocketAppender 를 위해 4560 port 를 리슨하고 있다. 다음 내용을 logback.xml 에 추가하면 된다.

<appender name="LogbackClassic" class="">

logger 에 적당한 appender 를 지정해 주거나(Ex: root logger)

<root level="INFO">
    <appender-ref ref="LogbackClassic"/>

logger 를 지정해 줄 수 있다.

<logger name="foo.Bar" level="DEBUG">
    <appender-ref ref="LogbackClassic"/>


Lilith ClassicMultiplexSocketAppender

Lilith is listening for Lilith ClassicMultiplexSocketAppender connections on port 10000 (compressed) and 10001 (uncompressed).

The Lilith ClassicMultiplexSocketAppender is a replacement for the logback-classic SocketAppender.

This appender, in contrast to logbacks, supports logger.debug("{} {}", new Object[]{foo, bar, throwable), i.e. if the last given parameter of a log message is a Throwable and it is not used up in the message pattern then it will be used as the Throwable of the LoggingEvent, similar to logger.debug(""+foo+" "+bar, throwable).


This has several benefits:

  • Sending to multiple remote hosts is supported while the event is only serialized once.
  • Events can (and should) be compressed using GZIP.
  • The appender supports heartbeat and timeout.
    • The event receiver can find out that the event sender connection died if a heartbeat is missing.
    • The event sender can find out that the event receiver connection died by means of a timeout This means that an application won't stop (at least not for very long) in case of network problem.


Add the following to your applications logback.xml:

<appender name="multiplex" class="de.huxhorn.lilith.logback.appender.ClassicMultiplexSocketAppender">
    <!-- will automatically use correct default port -->
    <!-- Default port for compressed is 10000 and uncompressed 10001 -->
    <!-- Alternatively:

You also have to attach the appender to some logger, e.g. the root logger...

<root level="INFO">
    <appender-ref ref="multiplex"/>

... or a specific logger...

<logger name="foo.Bar" level="DEBUG">
    <appender-ref ref="multiplex"/>

Using Lilith ClassicMultiplexSocketAppender requiresde.huxhorn.lilith:de.huxhorn.lilith.logback.appender.multiplex-classic as runtime dependency.


See Also




This page has no comments.