Motivation

Today we have a lot of logging frameworks in Java, but all of them offer the same approach and seem to be leveled off, they're still aiming at backwards compatibility and can't offer new functionality. We're aiming at filing that gap with some features that would increase significantly the programmers productivity and the overall system's performance and manageability. We based much of this on the logging approach of the Seam framework, but as it works only inside a Seam Application its usage is restricted. We're making something independent, and by addressing all of the above, we would have a powerful framework that do much more than simply "appending a message to an defined output". It covers internationalization, templating, formatting and flexibility. The programmer do not need to care about formatting the message in the specified way, they need just to use a key that can be defined and modified latter.

Example Use Case

Issuing a command like

logger.debug("user.logged.message", user, loginSource);

we could have an output similar to

2007-10-05 14:25:56.456 [DEBUG] [net.sourceforge.foo.Authenticator#authenticateUser()] "User john_hash, coming from 'www.foo.com' authenticated successfully from 555.55.55.555"

It's possible by mapping the key "user.logged.message" to something like

"User #{0, userId}, coming from '#{1}' authenticated successfully from #{0, remoteAddress}"

and then by reading the properties 'userId 'and 'remoteAddress' of the user parameter using reflection and mapping the 'loginSource' parameter to a string, we can substitute the variables in the log message resulting into the output above.

So, after all we're talking about flexibility and usage simplicity. On the one hand we're just refactoring the idea of the "classic" logging frameworks like log4j, on the other hand we're innovating with asynchronous formatting and IO, templating and conversion mapping, multiple appenders, the features described above and some others.