logging-log4j-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Ralph Goers <ralph.go...@dslextreme.com>
Subject Re: [Vote] Log4j 2.0-alpha1 rc1
Date Sun, 15 Jul 2012 14:20:18 GMT

On Jul 15, 2012, at 7:13 AM, Ralph Goers wrote:

> On Jul 15, 2012, at 6:36 AM, Gary Gregory wrote:
>> Hi All:
>> I've only now been able to take a peek at v2 in SVN so... sorry for the late email
but I feel better late than never.
>> With log4j 1.2, my usage pattern is:
>> logger.debug(String.format("This %s and that %d on this day %1$tm %1$te,%1$tY", this,
this.getThat(), this.getCalendar()));
>> In 2.0, we have this example:
>> logger.debug("Logging in user {} with id {}", user.getName(), user.getId());
>> Why invent a new syntax when String.format is baked into the JRE? 
> Because you are doing the string formatting whether the log event will be logged or not,
which means your logger.debug should always be wrapped in an if isDebugEnabled.  Also, the
current syntax is compatible with SLF4J. See http://www.slf4j.org/faq.html#logging_performance.
> If you want to write your debug message the way you have shown there is nothing that
says you can't. It will still work.  However, as I recall Ceki ran tests that showed the Java
text formatting is pretty slow.  See http://bugzilla.slf4j.org/show_bug.cgi?id=116 for a nice
discussion on this, and related topics.
> One other point.  The String with placeholders is handled by ParamaterizedMessage.  This
class could either be extended or enhanced to support another syntax. If it is extended then
that class would have to be used in the logging call such as
> 	logger.debug(new FormattedMessage("This %s and that %d on this day %1$tm %1$te,%1$tY",
this, this.getThat(), this.getCalendar()));
> The advantage with the above is that, although a FormattedMessage is created every time
the logger.debug statement is executed, it will defer the actual message formatting until
the event is logged (i.e. the formatting won't happen if debug logging is disabled).

I should note that you wouldn't be able to add a new Class named FormattedMessage as there
is already an interface with that name.


View raw message