Why do we declare Loggers static final?

java, logging

Solution

- `private` - so that no other class can hijack your logger

- `static` - so there is only one logger instance per class, also avoiding attempts to serialize loggers

- `final` - no need to change the logger over the lifetime of the class

Also, I prefer name `log` to be as simple as possible, yet descriptive.

EDIT: However there is an interesting exception to these rules:

protected final Logger log = LoggerFactory.getLogger(getClass());

as opposed to:

private static final Logger log = LoggerFactory.getLogger(Foo.class);

The former way allows you to use the same logger name (name of the actual class) in all classes throughout the inheritance hierarchy. So if `Bar` extends `Foo`, both will log to `Bar` logger. Some find it more intuitive.

Problem

In Java, why is it best practice to declare a logger `static final`? ``` private static final Logger S_LOGGER ```

Original source

Related problems