How to redirect java.util.logging to a file?

gulbrandr picture gulbrandr · Nov 27, 2010 · Viewed 9.3k times · Source

I have a java program using an external library. The main program uses log4j to log its messages and the library uses java.util.logging.

My problem is that log messages from the external library and the main program are mixed in the console.

I would like to redirect all log messages from the external library to a file. I tried to do that with a logging.properties file:

handlers= java.util.logging.FileHandler
.level= INFO
java.util.logging.FileHandler.pattern = foo.log
java.util.logging.FileHandler.formatter = java.util.logging.XMLFormatter

This file is initialized with:

System.setProperty("java.util.logging.config.file", "logging.properties");

Unfortunately, log messages from the external library keep appearing in the console. Should I use something like slf4j to intercept log messages from java.util.logging?

Thank you for your time.

Answer

JOTN picture JOTN · Nov 27, 2010

Here's some code from one of my programs. This also does automatic rotation. The config class is my own that's read from a properties files. You can just replace that with your own values.

Logger rootLogger = Logger.getLogger(""); 
logHandler = new FileHandler(config.getLogFile(), 
                             config.getLogRotateSize()*1024*1024, 
                             config.getLogRotateCount(), false); 
logHandler.setFormatter(new SimpleFormatter()); 
logHandler.setLevel(Level.INFO); 
rootLogger.removeHandler(rootLogger.getHandlers()[0]); 
rootLogger.setLevel(Level.INFO); 
rootLogger.addHandler(logHandler); 

Note this is for a stand-alone program. Any application server has it's own logging configuration tools. The program can also change the formatter and levels on the fly if a dynamic debug mode is desired.