2015-10-08 106 views
5

私のアプリケーションをlog4jからlog4j2にマイグレーションしています。移行中、custompatternlayouts,patternparsersおよびpatternconvertersが使用されています。私はlog4j2プラグインを使用してこれらの変更を実装する方法を認識していません。誰でもこのカスタムレイアウトTestPatternLayoutをlog4j2に変換する方法を教えてください。どうもありがとう。log4j2でカスタムパターンレイアウトを実装する方法

PFB log4jを使用してカスタムパターンのレイアウトがどのように実装されているかの完全な詳細。

TestPatternLayout:

public class TestPatternLayout extends PatternLayout { 

@Override 
protected PatternParser createPatternParser(String pattern) { 
    return new TestPatternParser(pattern); 
} 
} 

TestPatternParser:

public class TestPatternParser extends PatternParser { 

private static final char Test_CHAR = 'e'; 
private static final char DATETIME_CHAR = 'd'; 

public TestPatternParser(String pattern) { 
    super(pattern); 
} 

@Override 
protected void finalizeConverter(char c) { 
    switch (c) { 
     case Test_CHAR: 
      currentLiteral.setLength(0); 
      addConverter(new TestPatternConverter()); 
      break;    
     default: 
      super.finalizeConverter(c); 
    } 
} 
} 

TestPatternConverter:

public class TestPatternConverter extends PatternConverter { 

@Override 
protected String convert(LoggingEvent event) { 
    String testID = ObjectUtils.EMPTY_STRING; 
    if(TestLogHandler.isTestLogEnabled()) { 
     TestContextHolder contextHolder = TestLogHandler.getLatestContextHolderFromStack(event.getThreadName()); 
     if(contextHolder != null) { 
      testID = contextHolder.getTestIDForThread(event.getThreadName()); 
     } 
     else{ 
      testID = TestContextHolder.getTestIDForThread(event.getThreadName()); 
     } 
    } 
    return testID; 
} 
} 

log4j.xmlでレイアウト定義:

<appender name="TEST_LOG_FILE" class="org.apache.log4j.RollingFileAppender"> 
... 
    <layout class="com.test.it.logging.TestPatternLayout"> 
     <param name="ConversionPattern" value="%d %-5p [%c{1}] [TestId: %e] [%t] %m%n"/> 
</layout> 
... 
</appender> 

答えて

1

あなただけの新しいPluginを作成し、LogEventPatternConverterを拡張する必要があります。

@Plugin(name = "TestPatternConverter", category = PatternConverter.CATEGORY) 
@ConverterKeys({"e"}) 
public final class TestPatternConverter extends LogEventPatternConverter { 

    /** 
    * Private constructor. 
    * @param options options, may be null. 
    */ 
    private TestPatternConverter(final String[] options) { 
     super("TestId", "testId"); 
    } 

    /** 
    * Obtains an instance of pattern converter. 
    * 
    * @param options options, may be null. 
    * @return instance of pattern converter. 
    */ 
    public static TestPatternConverter newInstance(final String[] options) { 
     return new TestPatternConverter(options); 
    } 

    /** 
    * {@inheritDoc} 
    */ 
    @Override 
    public void format(final LogEvent event, final StringBuilder toAppendTo) { 
     String testID = ObjectUtils.EMPTY_STRING; 
     if(TestLogHandler.isTestLogEnabled()) { 
      TestContextHolder contextHolder = TestLogHandler.getLatestContextHolderFromStack(event.getThreadName()); 
      if(contextHolder != null) { 
       testID = contextHolder.getTestIDForThread(event.getThreadName()); 
      } 
      else{ 
       testID = TestContextHolder.getTestIDForThread(event.getThreadName()); 
      } 
     } 
     toAppendTo.append(testID); 
    } 
} 

し、構成を更新します。

でなければなりません
<Appender type="RollingFile" name="TEST_LOG_FILE" fileName="${filename}"> 
     <Layout type="PatternLayout"> 
     <Pattern>%d %-5p [%c{1}] [TestId: %e] [%t] %m%n</Pattern> 
     </Layout> 
</Appender> 

すべて。詳細についてはExtending log4j2 をご覧ください。

関連する問題