Can you achieve the same result with Thread context perhap? Gary -------- Original message -------- From: Chathura Priyankara <priyankara...@gmail.com> Date: 05/18/2015 07:40 (GMT-08:00) To: Log4J Developers List <log4j-dev@logging.apache.org> Subject: Re: [Dev][log4j2] How to create custom pattern layout in log4j2
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