I am moving my application from log4j2 to log4j2 API. During the migration, I found custom patternlayouts , patternparsers and patternconverters . I do not know how to implement these changes using log4j2 plugins. Can someone help me on how to convert this custom TestPatternLayout layout to log4j2. Thank you very much.
PFB full details on how a custom template layout is implemented using 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; } }
Layout definition in 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>
source share