Hi Ralph, There are some custom information that I need to log. Please see the following log4j properties.
log4j.appender.CONSOLE.layout=com.test.custom.PatternLayoutClass log4j.appender.CONSOLE.layout.ConversionPattern=[%d] %P%5p {%c} - %x %m%n log4j.appender.CONSOLE.layout.CustomPattern=%U%@%D[%T] Here some custom Conversion characters such as U, D etc. are used. If the conversion type is %P for ConversionPattern then the log information of CustomPattern will print. Can you please tell me how could I do the same thing with log4j2 ? Thank you very much for the reply. On Mon, May 18, 2015 at 6:25 PM, Ralph Goers <ralph.go...@dslextreme.com> wrote: > You shouldn't need to do this. What is different about your layout than > what comes with Log4j? If you simply have a custom pattern or 2 then you > would just implement those as converters. > > Ralph > > On May 18, 2015, at 5:41 AM, Chathura Priyankara <priyankara...@gmail.com> > wrote: > > I have to convert a pattern layout written for log4j 1.2. to log4j2. > Following code snippet shows a part of it. I have searched a lot about this > but couldn't find a proper guide. > Can anyone please give me a brief guide about how to do this conversion ? > > Any help is highly appreciated! > > public class CustomPatternLayout extends PatternLayout { > > public static final String DEFAULT_PATTERN = "[%T][%S]"; > private static String customPattern = DEFAULT_PATTERN; > > public CustomPatternLayout(String pattern) { > super(pattern);} > public synchronized void setCustomPattern(String customPattern) { > CustomPatternLayout.customPattern = customPattern;} > > private static class customPatternParser extends PatternParser { > > protected void finalizeConverter(char c) { > PatternConverter pc = null; > switch (c) { > case 'P': > pc = new UserNamePatternConverter(formattingInfo, > extractPrecisionOption()); > break; > . > . > . > default: > super.finalizeConverter(c); > } > if (pc != null) { > currentLiteral.setLength(0); > addConverter(pc); > } > } > private abstract static class CustomNamedPatternConverter extends > PatternConverter { > > private int precision; > > public CustomNamedPatternConverter(FormattingInfo formattingInfo, int > precision) { > super(formattingInfo); > this.precision = precision; > } > > protected abstract String getFullyQualifiedName(LoggingEvent event); > > public String convert(LoggingEvent event) { > String n = getFullyQualifiedName(event); > if (n == null) { > return ""; > } > if (precision <= 0) { > return n; > } else { > int len = n.length(); > int end = len - 1; > for (int i = precision; i > 0; i--) { > end = n.lastIndexOf('.', end - 1); > if (end == -1) { > return n; > } > } > return n.substring(end + 1, len); > } > } > } > > private static class MyPatternConverter extends > CustomNamedPatternConverter { > > public MyPatternConverter(FormattingInfo formattingInfo, int > precision) { > super(formattingInfo, precision); > } > > public String getFullyQualifiedName(LoggingEvent event) { > int userId = //Get user Id > if ( . . .) { > return new CustomPatternLayout(customPattern).format(event); > } > return someOther; > } > }}} > > Thanks in advance. > > -- > Chathura Priyankara, > Faculty of Information Technology, > University of Moratuwa. > Blog : www.codeoncloud.blogspot.com > > -- Chathura Priyankara, Faculty of Information Technology, University of Moratuwa. Blog : www.codeoncloud.blogspot.com