use Logger.getLogger() every time I need it or create once per class

powpow picture powpow · Jun 3, 2011 · Viewed 25.7k times · Source

I am using Java util Logger. According to the documentation for Logger.getLogger method, it says, "Find or create a logger for a named subsystem. If a logger has already been created with the given name it is returned. Otherwise a new logger is created.". Would there still be any benefit in calling it only once per class?

Option 1:

public class Myclass 
    static Logger logger = Logger.getLogger(Myclass.class);

    public void method1() {
        logger.log(...);
    }

    public void method2() {
        logger.log(....);
    }
}

Option 2:

public class Myclass {
    public void method1() {
        Logger.getLogger(Myclass.class).log(...);
    }

    public void method2() {
        Logger.getLogger(Myclass.class).log(...);
    }
}

Answer

Cameron Skinner picture Cameron Skinner · Jun 3, 2011

There are two not-very-important reasons why having a single static (probably final) instance is better than calling getLogger all the time.

  1. It makes the code slightly easier to read (in my opinion).
  2. There is a very small performance penalty you pay if you call Logger.getLogger all the time. It's not something to worry about unless you are calling it millions of times in a tight loop, but it's there.

That said, personal preference is vastly more important than either of these reasons. Option 1 is a common approach, but if you prefer option 2 then by all means use it. It's not going to hurt your code.