사용자 도구

사이트 도구


java:log4j:pattern

문서의 이전 판입니다!


Log4j 패턴 확장

hostname 패턴 확장

아래는 %h 패턴을 사용하여 호스트이름을 로그로 남겨줄 수 있도록 하는 PatternLayout 확장이다.

package kr.pe.kwonnam.log4j.pattern;
 
import java.net.InetAddress;
import java.net.UnknownHostException;
 
import org.apache.log4j.PatternLayout;
import org.apache.log4j.helpers.PatternConverter;
import org.apache.log4j.helpers.PatternParser;
import org.apache.log4j.spi.LoggingEvent;
 
public class HostnamePatternLayout extends PatternLayout {
 
  public static final char HOSTNAME_PATTERN_CHAR = 'h';
 
  protected static final String HOSTNAME;
 
  static {
    HOSTNAME = getHostname();
  }
 
  protected static String getHostname() {
    try {
      InetAddress addr = InetAddress.getLocalHost();
      return addr.getHostName();
    } catch (UnknownHostException ex) {
      return "unknown";
    }
  }
 
  @Override
  protected PatternParser createPatternParser(String pattern) {
    return new PatternParser(pattern) {
 
      @Override
      protected void finalizeConverter(char c) {
        PatternConverter pc = null;
 
        switch (c) {
        case HOSTNAME_PATTERN_CHAR:
          pc = new PatternConverter() {
            @Override
            protected String convert(LoggingEvent event) {
              return HOSTNAME;
            }
          };
          break;
        }
 
        if (pc == null) {
          super.finalizeConverter(c);
        } else {
          addConverter(pc);
        }
 
      }
    };
  }
}

실제 사용하기는 properties 방식은 다음과 같고,

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=kr.pe.kwonnam.log4j.pattern.HostnamePatternLayout

XML 방식은 다음과 같다.

<appender name="consoleAppender" class="org.apache.log4j.ConsoleAppender">
    <layout class="kr.pe.kwonnam.log4j.pattern.HostnamePatternLayout">
        <param name="ConversionPattern" value="%d %p %h %u [%c] - %m %n"/>
    </layout>
</appender>
java/log4j/pattern.1308626630.txt.gz · 마지막으로 수정됨: 2011/06/21 12:23 저자 kwon37xi