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.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…