views:

103

answers:

5

This question gets asked periodically, but I've long felt that existing Java logging frameworks were overcomplicated and over-engineered, and I want to see what's new.

I have a more critical issue on my current project as we've standardized on JSON as our human-readable data encoding, and most logging frameworks I've seen require XML. I would really rather avoid using JSON for 95% of my apps configuration, and XML for the rest just because of the logging framework (truth be told, I hate XML used for anything other than text markup, its original intended purpose).

Are there any hot new Java logging frameworks that are actively maintained, reasonably powerful, have a maven repo, can be reconfigured without restarting your app, and don't tie you to XML?

+1  A: 

SLF4J is the latest and greatest, as far as I know.

Surely the XML required to configure log4j couldn't be considered oppressive. You might be objecting to XML config in general, but even that's changing. Spring gives the option of using XML or annotations, as do most other frameworks. I think objecting to XML anything other than markup is going too far. Should Ant and NANT shut down because they chose XML? I think not.

duffymo
SLF4J is not really a logging framework though, just a facade.
Pascal Thivent
The supplied list of logging frameworks looks rather exhaustive to me. It includes java.util.logging. The OP is free to plug in the one that best meets the need.
duffymo
Yes, you need to plug a logging framework (jul, log4j, logback), sfl4j is just a facade.
Pascal Thivent
A: 

While the common configuration method for log4j is xml, you can also configure it programatically, which means you can use any configuration system you want (and also reconfigure it at runtime).

Omry
+3  A: 

wasn't logback the latest?

raticulin
+2  A: 

You have basically 3 options: Log4J, java.util.logging (JUL) and logback (the successor of Log4J). Now, let's see how they meet your requirements (1. actively maintained, 2. reasonably powerful, 3. have a maven repo, 4. can be reconfigured without restarting your app, 5. don't tie you to XML):

  • Log4J: 1. No - 2. Yes - 3. Yes - 4. Yes - 5. Yes (using Java properties file, see Configuration).
  • java.util.logging: 1. I'd say Yes - 2. at your discretion - 3. N/A - 4. Yes (via JMX or LogManager#readConfiguration() - 5. Yes (using properties files).
  • logback: 1. Yes - 2. Yes - 3. Yes - 4. Yes, via JMX or autoScan - 5. No (XML only).

It looks like you'll have to make some concessions (or to find a framework I'm not aware of). I would go for logback, this is where things happen now.

Pascal Thivent
A: 

You might want to look into our Java logging tool SmartInspect (it's commercial). SmartInspect is actively maintained, can be configured with two lines of code and supports configuration files that just contain name = value pairs (no XML :)). SmartInspect can also automatically reload configurations files on-the-fly when they are changed - a useful feature for live configuration changes and production systems. SmartInspect also comes with a graphical log analysis and monitoring tool that you might find useful:

alt text

Dennis G.