Hi Ralph,

I checked the RegexReplacementConverter, but In my case the logs get
printed for %P change for appender to appender.
Even user can add difined Converter type.
As an example for console appender it is

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]

For file appender it is

log4j.appender.CONSOLE.layout=com.test.custom.PatternLayoutClass
log4j.appender.CONSOLE.layout.ConversionPattern=[%T] [%S] [%d] %P%5p {%c} -
%x %m %n
log4j.appender.CONSOLE.layout.CustomPattern=%U%@%D [%T] [%S]

User can change this to
log4j.appender.CONSOLE.layout.CustomPattern=%U%@%D [%T]

If you check my code in the first mail one condition is checked and if only
it is true the logs of CustomPattern will be generated.

What would be the best way to do this thing in log4j2 ?

Thanks!

On Mon, May 18, 2015 at 10:10 PM, Chathura Priyankara <
priyankara...@gmail.com> wrote:

> Ok I'll check.
> Thank you all for the great support.
>
> On Mon, May 18, 2015 at 10:08 PM, Ralph Goers <ralph.go...@dslextreme.com>
> wrote:
>
>> See the RegexReplacementConverter. It does something similar.
>>
>> Ralph
>>
>>
>>
>> On May 18, 2015, at 9:10 AM, Chathura Priyankara <priyankara...@gmail.com>
>> wrote:
>>
>> Hi Ralph,
>>
>> Thanks for the response.
>> It is conditionally including that pattern. (This application uses log4j
>> via commons API so that I cannot use thread context maps)
>> Using a converter for P how could I get the part within the curly braces
>> and convert it ?
>> Does the pattern parser comes inside the Converter ?
>>
>> On Mon, May 18, 2015 at 9:15 PM, Ralph Goers <ralph.go...@dslextreme.com>
>> wrote:
>>
>>> I am a bit confused when you say if the conversion type is %P then the
>>> log information of CustomPattern will print. Are you saying it would be as
>>> if the pattern was
>>>
>>> [%d] %U%@%D[%T]%5p {%c} - %x %m%n
>>>
>>> ?
>>>
>>> If so, why isn’t the pattern just set to that?  If you mean you want to
>>> conditionally include that pattern than you would want to do something like:
>>>
>>> [%d] %P{%U%@%D[%T]}%5p {%c} - %x %m%n
>>>
>>> The pattern converter for %P should be passed the pattern within the
>>> curly braces and would then need to create its own PatternParser instance
>>> for that pattern and then call the formatters in the format method.
>>>
>>> Ralph
>>>
>>>
>>>
>>> On May 18, 2015, at 7:40 AM, Chathura Priyankara <
>>> priyankara...@gmail.com> wrote:
>>>
>>> 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
>>
>>
>>
>
>
> --
> 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

Reply via email to