[Java] 로깅할 때 marker로 필터링하기

by 스뎅(thDeng) on

개발 시에만 로깅을 하고 실서비스에서는 안 보여주고 싶은 로그가 있을 때, marker를 쓰면 은근 필터링하기 좋다. 또는, 개인정보가 담긴 로깅을 할 때 실서비스에서는 로깅하지 않도록 필터링할 수 있다. marker도 함께 로깅해서 로깅파일을 분석에 사용할 수도 있다. 일부 appender를 분리하고 특정 marker가 달린/달리지않은 경우만 로깅을 할 수도 있다.

Marker

예를 들어, 개발 시에만 보고 싶은 메시지 전송 관련 로깅을 한다고 하면, 아래처럼 MESSAGE라는 marker를 만들고 로깅할 때 마다 marker를 지정해 준다. (전체 샘플은 요기에)


public class Publisher {
  private static final Marker MESSAGE_MARKER = MarkerFactory.getMarker("MESSAGE");
  private static final Logger log = LoggerFactory.getLogger(MarkerFilterSample.class);

  public static void publish(String message) {
    log.debug("Attempting to publish message");
    messageTemplate.publish("message");
    log.debug(MESSAGE_MARKER, "Message published: " + message);
  }
}

자.. 아래의 logback.xml 설정으로 실행을 해 보자.

<?xml version="1.0" encoding="UTF-8"?>

<configuration>

  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - [%marker] %msg%n</pattern>
    </encoder>
  </appender>

  <root level="DEBUG">
    <appender-ref ref="STDOUT" />
  </root>

</configuration>

로깅할 때 marker도 보여주려면 설정에서 %marker라고 적어주면 된다. 음.. marker를 볼 수 있는거 말고 별로 다른게 없는데??

17:46:14.812 [main] DEBUG k.l.t.s.logger.MarkerFilterSample - [] Attempting to publish message
17:46:14.815 [main] DEBUG k.l.t.s.logger.MarkerFilterSample - [MESSAGE] Message published: THIS IS MY PERSONAL MESSAGE

Marker Filter

그럼 이 marker로 필터링을 할 수 있게 필터를 추가해 보자. 위의 xml 설정에서 turboFilter만 추가했다.

<?xml version="1.0" encoding="UTF-8"?>

<configuration>

  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - [%marker] %msg%n</pattern>
    </encoder>
  </appender>

  <turboFilter class="ch.qos.logback.classic.turbo.MarkerFilter">
    <Name>MESSAGE_FILTER</Name>
    <Marker>MESSAGE</Marker>
    <OnMatch>DENY</OnMatch>
  </turboFilter>

  <root level="DEBUG">
    <appender-ref ref="STDOUT" />
  </root>

</configuration>

marker MESSAGE를 발견하면 DENY 처리해서 로깅이 되지 않도록 한다. 실행해 보면, MESSAGE marker가 달린 로그가 없어졌다. (전체 샘플은 요기에)

17:48:21.321 [main] DEBUG k.l.t.s.logger.MarkerFilterSample - [] Attempting to publish message

filter 설정에 OnMatch 이외에 OnMismatch도 설정이 가능하다. 사용 가능한 값은 ACCEPT, DENY, NEUTRAL이고, default값은 OnMatchNEUTRAL이고 OnMismatchDENY이다.

참고

별도로 명시하지 않을 경우, 이 블로그의 포스트는 다음 라이선스에 따라 사용할 수 있습니다: Creative Commons License CC Attribution-NonCommercial-ShareAlike 4.0 International License