On Thu, Jun 16, 2016 at 12:48 PM, Paul Benedict <[email protected]>
wrote:
> I imagine parsing the placeholder is going to be expensive (relatively
> speaking). It is an extra cost.
>
We already support different ways to paramaterize messages [1]: {}, %s (and
family), java.text.MessageFormat, and so on. Each has its different
overhead.
This could be a variation of the ParameterizedMessage class for example. Or
maybe an extension of to one or more other message types.
Gary
[1] https://logging.apache.org/log4j/2.x/manual/messages.html
> I advise devising a new interface that appenders can implement to receive
> the parsed tokens. If the interface is missing, no parsing in-between is
> necessary. Otherwise, send the tokens to the appender as a callback for it
> to make the necessary modifications -- such as setting the color.
>
> Cheers,
> Paul
>
> On Thu, Jun 16, 2016 at 1:53 PM, Gary Gregory <[email protected]>
> wrote:
>
>>
>> On Jun 16, 2016 11:25 AM, "Paul Benedict" <[email protected]> wrote:
>> >
>> > 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.
>>
>> Ok yes, that's what I was talking about. Also:
>>
>> log.info("Hello {color:green Gary}, how are you?");
>>
>> Gary
>> >
>> > 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
>> >>>>>> JUnit in Action, Second Edition
>> >>>>>> Spring Batch in Action
>> >>>>>> 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
>> >>>>> JUnit in Action, Second Edition
>> >>>>> Spring Batch in Action
>> >>>>> 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
>> >>>> JUnit in Action, Second Edition
>> >>>> Spring Batch in Action
>> >>>> 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
>> >> JUnit in Action, Second Edition
>> >> Spring Batch in Action
>> >> 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