I think color falls into the category of formatting. By that, I mean to state that colors shouldn't be hardcoded into messages :-) That should belong to the actual formatter... template string or appender configuration.
Cheers, Paul On Thu, Jun 16, 2016 at 12:58 PM, Gary Gregory <[email protected]> wrote: > On Thu, Jun 16, 2016 at 10:39 AM, Gary Gregory <[email protected]> > wrote: > >> On Wed, Jun 15, 2016 at 10:50 PM, Gary Gregory <[email protected]> >> wrote: >> >>> Hi All, >>> >>> See color messages in Maven 3.4.0-SNAPSHOT made me think of the >>> following. >>> >>> Right now, with Jansi on the CP, I can say: >>> >>> import static org.fusesource.jansi.Ansi.*; >>> import static org.fusesource.jansi.Ansi.Color.*; >>> ... >>> logger.info(ansi().fg(RED).a("Hello").fg(CYAN).a(" World").reset()); >>> >>> and the right thing happens on the console. >>> >>> If I also have a file appender, I get the escape codes in the file, >>> which I do not think most people would want. >>> >>> The question is, how can we make it simple for users to have their cake >>> and eat it too? >>> >>> With a special Message implementation? >>> >>> Thoughts? >>> >> >> One way would be to have the non-a() methods (plus reset()) become no-ops >> when not using a console appender. But how? We could have a subclass of >> JAnsi's Ansi class that gets used. Anyway, I'm just rambling. >> > > Still rambling, mostly so I have a place to look back for these notes: > > - nope, the reset() method would need to be noop'd. > - Example of a color message: > org.apache.logging.log4j.core.appender.ConsoleAppenderJAnsiMessageMain > - JAnsi also supports a special syntax, for example: > > "@|red Hello|@ @|cyan World|@" > > but if use that like: > > logger.info("@|red Hello|@ @|cyan World|@"); > > JAnsi rendering does not kick in unsurprisingly. > > Maybe the Console appender could make sure the JAnsi renderer is used > (optional), so that > > logger.info(ansi().render("@|red Hello|@ @|green World|@"); > > can become: > > logger.info("@|red Hello|@ @|green World|@"); > > and then we can add a renderJansi option to the console appender but... > the decorations still end up in a file appender so we are still in the same > pickle. > > Thinking about a MessageRenderer (String render(String)) interface with > two impl: one that calls ansi().render(String) for console appenders > (optionally, if renderJansi=true) and another that strips the decorations > (but this feels heavy). > > More rambling: > > Instead of: > > logger.info(ansi().fg(RED).a("Hello").fg(CYAN).a(" World").reset()); > > say: > > logger.info((Ansi ansi) -> ansi.fg(RED).a("Hello").fg(CYAN).a(" > World").reset()); > > Then we can pass in a custom Ansi subclass that only outputs the string > bits, no escape codes. > > Gary > > >> Gary >> >> >>> Thank you, >>> Gary >>> -- >>> E-Mail: [email protected] | [email protected] >>> 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 >>> >> >> >> >> -- >> E-Mail: [email protected] | [email protected] >> 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 >> > > > > -- > E-Mail: [email protected] | [email protected] > 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 >
