在 class 中初始化记录器的最佳方法是什么?
What's the best way to initialise a logger in a class?
我有两个选项可以在 class 中初始化 Logger
。
第一种方法是提供 Class<?>
:
的实例
logger = LoggerFactory.getLogger(SignUpController.class);
第二个传递 String
标识符(包和 class 名称):
logger = LoggerFactory.getLogger("controller.SignUpController");
问题是:
为 class 初始化记录器的最佳方法是什么?
应该和什么修饰符一起使用? (访问修饰符,static
,final
)
使用第一个
private static final Logger logger = LoggerFactory.getLogger(SignUpController.class);
因为那个api(正在接受class对象),该方法在内部调用完全限定的class名称,所以日志记录 control/configuration 可以正常完成。
我更喜欢private static final
因为
private:记录器实例不应该在 class
之外可用
static: class
的每个对象都有单独的实例是没有用的
final 初始化后不更改引用。
我用
public final Logger = LogFactory.getLogger(getClass());
对于一个人来说,这将始终确保正确的 class 名称,即使在重构 class 名称之后也是如此。每个实例化对象一个记录器实例的开销与每个 class 相比可以忽略不计。
我只在需要将某些内容作为静态上下文登录然后使用您的第一种方法对其进行初始化时才使用静态记录器。
这个解决方案:
private static final Logger logger = LoggerFactory.getLogger(SignUpController.class);
的缺点是它会被复制并粘贴到其他 class 中,而且很容易忘记调整 class 名称。因此,我更喜欢这种对 "copy & paste":
安全的解决方案
private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
我有两个选项可以在 class 中初始化 Logger
。
第一种方法是提供 Class<?>
:
logger = LoggerFactory.getLogger(SignUpController.class);
第二个传递 String
标识符(包和 class 名称):
logger = LoggerFactory.getLogger("controller.SignUpController");
问题是:
为 class 初始化记录器的最佳方法是什么?
应该和什么修饰符一起使用? (访问修饰符,static
,final
)
使用第一个
private static final Logger logger = LoggerFactory.getLogger(SignUpController.class);
因为那个api(正在接受class对象),该方法在内部调用完全限定的class名称,所以日志记录 control/configuration 可以正常完成。
我更喜欢private static final
因为
private:记录器实例不应该在 class
之外可用static: class
的每个对象都有单独的实例是没有用的final 初始化后不更改引用。
我用
public final Logger = LogFactory.getLogger(getClass());
对于一个人来说,这将始终确保正确的 class 名称,即使在重构 class 名称之后也是如此。每个实例化对象一个记录器实例的开销与每个 class 相比可以忽略不计。
我只在需要将某些内容作为静态上下文登录然后使用您的第一种方法对其进行初始化时才使用静态记录器。
这个解决方案:
private static final Logger logger = LoggerFactory.getLogger(SignUpController.class);
的缺点是它会被复制并粘贴到其他 class 中,而且很容易忘记调整 class 名称。因此,我更喜欢这种对 "copy & paste":
安全的解决方案private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());