在类中初始化记录器的最佳方法是什么?

And*_*lko 4 java logging log4j logback

我有两个选项来初始化Logger一个类.

第一种方法是提供以下实例Class<?>:

logger = LoggerFactory.getLogger(SignUpController.class);
Run Code Online (Sandbox Code Playgroud)

第二个是传递一个String标识符(包和类名):

logger = LoggerFactory.getLogger("controller.SignUpController");
Run Code Online (Sandbox Code Playgroud)

问题是:

初始化类的记录器的最佳方法是什么?
应该使用哪些修饰符?(访问修饰符static,final)

hot*_*zst 6

我用

public final Logger = LogFactory.getLogger(getClass());
Run Code Online (Sandbox Code Playgroud)

首先,即使重构了类名,这也将确保始终正确的类名.每个实例化对象与每个类的一个记录器实例的开销是可忽略的.

当我需要在静态上下文中记录某些内容然后使用您的第一种方法初始化时,我只使用静态记录器.


raj*_*uGT 5

使用第一个

private static final Logger logger = LoggerFactory.getLogger(SignUpController.class);
Run Code Online (Sandbox Code Playgroud)

因为该api(正在接受类对象)在内部调用了完全限定的类名,所以可以正确完成日志记录控制/配置。

我喜欢private static final因为

private:对于logger实例,该类之外的实例不应使用

静态的:没有为类的每个对象使用单独的实例

最后是在初始化引用后不要更改引用。