【发布时间】:2011-04-20 01:26:45
【问题描述】:
记录器是否应该被声明为静态的?通常我见过两种类型的记录器声明:
protected Log log = new Log4JLogger(aClass.class);或
私有静态日志 log = new Log4JLogger(aClass.class);应该使用哪一个?两者的优缺点是什么?
【问题讨论】:
-
日志记录是一个跨领域的关注点。使用方面,问题没有实际意义。
-
static是每个班级的一个参考。非静态是每个实例一个引用(+初始化)。因此,在某些情况下,如果您有大量实例,后者会对内存产生重大影响。永远不要在 frequent 对象中使用非静态对象。我总是使用静态版本。 (应该大写LOG) -
如前所述,使用 AOP 和注解,例如:jcabi.com/jcabi-aspects/annotation-loggable.html
-
RobertHume 的静态版本是使用一个常量。这正是它应该大写的原因。
-
不应该是小写的
private static final Log log。记录器不是一个常数,记录器是一个静态的最终对象(可以变异)。就我个人而言,我总是使用logger。