Please see https://logging.apache.org/log4j/2.x/manual/extending.html

Gary

On Mon, May 18, 2015 at 8:30 AM, Chathura Priyankara <
priyankara...@gmail.com> wrote:

> Hi Gary,
>
> Thanks for the prompt response.
> (For my purpose cannot use Thread context maps because these log
> information are highly user configurable)
> Could you please tell me one thing. If I have custom pattern layout plugin
> eg: (plugin name = CustomPatternLayout).
> How would I configure this for a particular appender using log4j2.xml?
>
> Eg:
>
> <Console name="CONSOLE" target="SYSTEM_OUT">
>       <PatternLayout pattern="%U%D[%T]"/>
> </Console>
>
> Here how can I configure console appender to use my CustomPatternLayout ?
>
> Thanks.
>
>
> On Mon, May 18, 2015 at 8:46 PM, Gary Gregory <garydgreg...@gmail.com>
> wrote:
>
>> 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
>>
>
>
>
> --
> Chathura Priyankara,
> Faculty of Information Technology,
> University of Moratuwa.
> Blog  : www.codeoncloud.blogspot.com
>



-- 
E-Mail: garydgreg...@gmail.com | ggreg...@apache.org
Java Persistence with Hibernate, Second Edition
<http://www.manning.com/bauer3/>
JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
Spring Batch in Action <http://www.manning.com/templier/>
Blog: http://garygregory.wordpress.com
Home: http://garygregory.com/
Tweet! http://twitter.com/GaryGregory

Reply via email to