Are you asking me for blue sky thinking, perhaps something like this:
log.info("Hello, {color:green}, how are you?", "Gary");
For this example, I took the {} placeholder and added some context.
Cheers,
Paul
On Thu, Jun 16, 2016 at 1:22 PM, Gary Gregory <[email protected]>
wrote:
> On Thu, Jun 16, 2016 at 11:04 AM, Paul Benedict <[email protected]>
> wrote:
>
>> 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.
>>
>
> What would that look like? I do not see how do to that without creating a
> lot of custom code.
>
> Gary
>
>
>>
>> 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
>>>
>>
>>
>
>
> --
> 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
>