commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Romain Manni-Bucau <>
Subject Re: [jcs] logging
Date Mon, 02 Jun 2014 06:36:09 GMT
Well because [logging] was longly broken in a not flat classloading
environment (didnt check last release but almost all logging facade got
this issue at a point) and because almost nothing in TomEE stacks uses it,
it is not as integrated as log4j, slf4j or JUL (which is the default). Main
issue I saw was leaks (due to classloaders management) and potentially
wrong config detection (same reason). I hacked in TomEE slf4j to force it
to be smart cause users often rely on it but not [logging yet]. Until here
you can say that's a TomEE issue (as fair as saying that's a JCS one).

Then you can't seriously use JUL with [logging] cause of this method (from

    protected void log( Level level, String msg, Throwable ex ) {
        Logger logger = getLogger();
        if (logger.isLoggable(level)) {
            // Hack (?) to get the stack trace.
            Throwable dummyException = new Throwable();
            StackTraceElement locations[] = dummyException.getStackTrace();
            // LOGGING-132: use the provided logger name instead of
the class name
            String cname = name;
            String method = "unknown";
            // Caller will be the third element
            if( locations != null && locations.length > 2 ) {
                StackTraceElement caller = locations[2];
                method = caller.getMethodName();
            if( ex == null ) {
                logger.logp( level, cname, method, msg );
            } else {
                logger.logp( level, cname, method, msg, ex );

getStackTrace will be too expensive that you will just want
logger.isLoggable(level) to be false. There is no magic to make it
consistent and fast. Half of impl doesn't respect method to avoid it.

But then the question is regarding JCache. All apache spec impl uses JUL as
primary logger (allowing then to override it) to avoid to force the
container/environment and let the user deciding what to use. Here the issue
is JCache is built on top of JCS. So either both use JUL or if JCS uses
[logging] by default then JCache will bring [logging] and force its usage.

Romain Manni-Bucau
Twitter: @rmannibucau

2014-06-02 8:17 GMT+02:00 Jörg Schaible <>:

> Romain Manni-Bucau wrote:
> > Hi
> >
> > I have two main point to discuss regarding the logging:
> > 1) LogHelper stuffI committed. Idea was to cache isDebugEnabled to get a
> > if (boolean) complexity and not go through the logging framework which
> can
> > imply several layers (filter, appender, handler, logger...) for nothing
> > and slow down caching (which has more perf constraints than other
> > backends. This really depends on the logger you use but we can't suppose
> > it is the one we benched against. Solutions I see: a) keep LogHelper, b)
> > remove logs (some are useless I think), 3) other?
> >
> > 2) logger api used. ATM we use [logging] but it will surely be an issue
> > for TomEE when integrated ([logging] is the less integrated framework -
> > compared to JUL or SLF4J where we don't have the choice at all)
> ?? Can you explain a bit more? You can logging redirect to use JUL, so what
> kind of issues are you thinking about?
> > and I
> > think we'd be happy to remove it from the container to let it be
> > application oriented if we can. Any idea to make it hurtless? This
> doesn't
> > urge and doesn't block anything but if someone has an awesome idea it
> > would be welcomed ;)
> >
> >
> > Romain Manni-Bucau
> > Twitter: @rmannibucau
> > Blog:
> > LinkedIn:
> > Github:
> ---------------------------------------------------------------------
> To unsubscribe, e-mail:
> For additional commands, e-mail:

  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message