这是在java中声明logger变量的最佳方法

时间:2012-01-06 10:40:42

标签: java logging

我只想知道在java中声明logger变量的最佳方法是哪种。 以下是一些声明。

1> private static final Logger logger = Logger.getLogger(ServiceImpl.class);

2> private static Logger logger = Logger.getLogger(ServiceImpl.class);

3> private static final Logger LOGGER= Logger.getLogger(ServiceImpl.class);

4> private static Logger LOGGER= Logger.getLogger(ServiceImpl.class);

如果有人知道另一种声明looger变量的最佳替代方法,我真的很感激。

10 个答案:

答案 0 :(得分:11)

所有大写变量名称都是IMO输出,因为您实际上并未声明/定义常量而是静态变量。大写名称更适合"常量"。也就是说,我亲自采用第一种方法。

private static final Logger logger = Logger.getLogger(ServiceImpl.class);

答案 1 :(得分:5)

我投票赞成 3

 private static final Logger LOGGER = Logger.getLogger(ServiceImpl.class);

它是final,因为你没有改变它,它是大写的,因为它是一个常量。

答案 2 :(得分:3)

我个人认为private static final Logger LOGGER= Logger.getLogger(ServiceImpl.class);是出于语义和性能原因的最佳方式:

  • 您的日志属于该类而不属于它的各种实例,因此您应该将其设为静态
  • 它应该是私有的,因为它是由类内部使用的,它不是它的公共API的一部分
  • 最后两个是有意义的,首先是因为这表明参考不会改变(这是这里的情况),第二因为最终的intance变量(特别是静态变量)可以通过编译器和JIT(更多细节 here
  • 将它全部命名为大写只是一个很好的约定,就是如何在Java中声明静态变量,它不是必须的,但它使代码更具可读性

答案 3 :(得分:1)

我会选择第一个选项,但我认为这是个人选择的问题。

答案 4 :(得分:0)

第一个是最好的。我更喜欢记录器为finalstatic ....

答案 5 :(得分:0)

在我对java风格指南的理解中,'logger'是最好的。 'LOGGER'将用于定义的常数。

此外,使用'final',应该让它更快一些。

因此#1。

答案 6 :(得分:0)

我建议不要在每个类中使用这样的变量,而是将此工作委托给来自jcabi-log的slf4j的静态实用程序包装器:

Logger.debug(this, "some variable = %s", value);

同时查看此帖子:http://www.yegor256.com/2014/05/23/avoid-java-static-logger.html

答案 7 :(得分:0)

在特定类的所有实例之间共享单个记录器对象并在程序的持续时间内使用相同的记录器是一种很好的编程习惯,因此我们使用staticfinal记录器。

不建议使用多个记录器(不良记录实践)而不是记录级别。

我认为

private static final Logger logger = Logger.getLogger(ServiceImpl.class);

是更好的选择。

答案 8 :(得分:0)

此处没有人使用LOGlog?我发现它在实践中更好。 (当然我不是第一个在标准的地方工作的人,因为龙目岛的@Log4j也会生成一个log字段。当然它也是静态最终的。而顺便说一下,这就是声明该字段的最佳方式...添加@Log4j注释。完成。)

答案 9 :(得分:0)

private static final Logger LOGGER = Logger.getLogger(NameClass.class.getName());

如果记录器是最终的结算变量,则应在大写字母中定义。 虽然getLogger()静态方法需要使用String作为参数,但类名还应该调用类的.getName()。