The coloring isn't done by the layout but by the StylePatternConverter and the 
HighlightPatternConverter. Rather than creating a new converter you can simply 
enhance the HighlightPatternConverter to accept the styling. So in addition to 
being able to do

<pattern>%d %highlight{%p} %style{%C{1.} [%t] %m}{bold,green}%n</pattern>

you could also do

<pattern>%d %highlight{%p}{FATAL=magenta bold, ERROR=red, WARN=yellow bold, 
INFO=green} %style{%C{1.} [%t] %m}{bold,green}%n</pattern>

Ralph

On Oct 31, 2012, at 7:40 PM, Gary Gregory wrote:

> Hi All:
> 
> Nice job getting JAnsi support in Log4J2! 
> 
> I have a custom appender I use for 1.2 to color whole lines based on the 
> level with some sensible defaults the use can override. For example:
> 
> log4j.appender.ColorConsole=com.seagullsw.toolbox.log4j.AnsiConsoleAppender
> log4j.appender.ColorConsole.ImmediateFlush=true
> log4j.appender.ColorConsole.Target=System.out
> log4j.appender.ColorConsole.layout=org.apache.log4j.EnhancedPatternLayout
> log4j.appender.ColorConsole.layout.ConversionPattern=%d{ISO8601} [%t] %-5p: 
> %m%n
> 
> #log4j.appender.ColorConsole.FatalColor=\u001b[1;35m
> #log4j.appender.ColorConsole.ErrorColor=\u001b[1;31m
> #log4j.appender.ColorConsole.WarnColor=\u001b[0;33m
> #log4j.appender.ColorConsole.InfoColor=\u001b[0;32m
> #log4j.appender.ColorConsole.DebugColor=\u001b[0;36m
> #log4j.appender.ColorConsole.TraceColor=\u001b[1;30m
> 
> log4j.appender.ColorConsole.FatalColor=//bold magenta
> log4j.appender.ColorConsole.ErrorColor=//bold red
> log4j.appender.ColorConsole.WarnColor=//bold yellow
> log4j.appender.ColorConsole.InfoColor=//green
> log4j.appender.ColorConsole.DebugColor=//cyan
> log4j.appender.ColorConsole.TraceColor=//bold black
> 
> To do this a la log4j (1 and 2) though, it seems that the work should be done 
> in the layout and not in the appender.
> 
> But right now, I do not see a way to color the whole line (or part of a line 
> for that matter) based on the level for a given event.
> 
> I can do fancy formatting like:
> 
>       <PatternLayout pattern="%style{%d{ ISO8601 }}{black} %style{[%t]}{blue} 
> %style{%-5level:}{yellow} %style{%msg%n%throwable}{green}" />
> 
> But that's not what I want. So I am considering putting more smarts in 
> PatternLayout.
> 
> Does that seem sensitive?
> 
> What should the configuration look like and how would you let it use defaults 
> if some levels are not matched with colors?
> 
> How about a new converter called level-style? For example:
> 
> Use default colors:
> 
> <PatternLayout pattern="%level-style{%d{ ISO8601 } [%t] %-5level: 
> %msg%n%throwable}" />
> 
> Use custom colors:
> 
> <PatternLayout pattern="%level-style{%d{ ISO8601 } [%t] %-5level: 
> %msg%n%throwable}{FATAL=magenta bold, ERROR=red, WARN=yellow bold, 
> INFO=green}" />
> 
> Your thoughts please.
> 
> Gary
> 
> -- 
> E-Mail: garydgreg...@gmail.com | ggreg...@apache.org 
> JUnit in Action, 2nd Ed: http://bit.ly/ECvg0
> Spring Batch in Action: http://bit.ly/bqpbCK
> Blog: http://garygregory.wordpress.com 
> Home: http://garygregory.com/
> Tweet! http://twitter.com/GaryGregory

Reply via email to