views:

24

answers:

0

I am using java.util.logging to do all the logging of my application.

Until recently, I was using the logging facility without any specific configuration. Everything worked as expected, all the logs were visible in the console (stderr)

Now, I wanted to customize the configuration for my logs. I want the logs to be displayed on the console, but I want them to be written in a file, too. I came up with the following solution :

public static void main(String[] args) {
    System.setProperty("java.util.logging.config.file", "log.config");
    Logger defLogger = Logger.getLogger("fr.def"); // all loggers I use begin by "fr.def"
    defLogger.setLevel(Level.ALL);
    defLogger.addHandler(new ConsoleHandler());
    defLogger.addHandler(new FileHandler());
    // real code here ...

Here is the content of the log.config file :

java.util.logging.FileHandler.formatter=java.util.logging.SimpleFormatter
java.util.logging.FileHandler.count=10
java.util.logging.FileHandler.pattern=logs/visiodef2.%g.log

This solution mostly works : I can see the logs in the console, and in the files too. Except that, in some situations, some log messages are simply lost (for both the console and the file). Examples of situations where logs are lost :

  • on a shutdown hook of the JVM
  • on the default uncaught exception handler
  • on the EDT's exception handler
  • on the windowClosing event of the main JFrame (configured with the default close operation EXIT_ON_CLOSE)

There is no other configuration than what is described above. The log level is not involved : I can see some INFO logs, but some of the lost logs are SEVERE.

I also tried to add a shutdown hook to flush all the Handlers, but with no success.

So, the question : is it safe to configure my logging the way I do ? Can you see any reason why some logs can be lost ?