logging-log4j-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Adrian Sandor <adi...@yahoo.com>
Subject Re: Suggestion - 1.3 API, Logger method signatures
Date Tue, 12 Dec 2006 03:02:12 GMT
I don't use java <1.5 at all, so I would prefer: public void debug(Object messagePattern,
Object... args);

I suppose it has the same overhead though (because of automatic boxing and array creation),
just much sweeter to write.

As for throwables, it has to be like: public void trace(Object messagePattern, Throwable t,
Object... args);

About formatting style, maybe the getLogger method should also accept an extra argument for
choosing what kind of formatting to use (printf / MessageFormat / ...) or it could even use
some kind of formatter interface (that users can implement the way they like, with some default
implementations provided).


----- Original Message ----
From: Morten Hattesen <morten.hattesen@gmail.com>
To: log4j-user@logging.apache.org
Sent: Monday, December 11, 2006 10:22:28 PM
Subject: Suggestion - 1.3 API, Logger method signatures


The Log4J 1.3 API changes to the org.apache.log4j.Logger API was
changed to allow the use of use message patterns

This was obviously done do avoid excessive string concatenation by the
compiler when calling a logging method, as well as to make the code
more legible.

Example (log4j 1.2 api):

    logger.debug("Fetching data for " + user.name + " from database");

... may be expressed like so in log4j 1.3:

    logger.debug("Fetching data for {0} from database", user.name);

As a side effect it is no longer as essential to wrap calls to logging
methods in a conditional ...

    if (logger.isDebugEnabled) {

... since the string concatenation overhead is now not incurred unless
the logging actually takes place.

However, what surprises me, is that the API only supports 1 and 2
argument messages, and that message pattern is not supported at all
when passing a throwable.

I can see a point in allowing a single argument convenience method
signature, e.g.:

    public void debug(Object messagePattern, Object arg);

But to support multiple (2 or more) arguments (using JRE 1.2), an
Object array should be used, e.g:

    public void debug(Object messagePattern, Object[] args);

In other words, I suggest that all the two-argument methods of
org.apache.log4j.Logger (and its deprecated super classes) should be
removed, e.g:

    public void xxxx(String messagePattern, Object arg1, Object arg2);

... and replaced by ...

    public void xxxx(String messagePattern, Object[] args);

Also, I feel that in order to keep the 1.3 API "clean" the logging
methods that take a throwable argument should be overloaded with
message pattern arguments, too, e.g.
    public void trace(Object messagePattern, Object arg, Throwable t);
    public void trace(Object messagePattern, Object[] args, Throwable t);

Can I please get some views on this subject from other Log4J users,
before submitting it formally to the developers' list.


Morten Hattesen

To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-user-help@logging.apache.org

Do you Yahoo!?
Everyone is raving about the all-new Yahoo! Mail beta.
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message