Gug*_*see 8 java logging static
我是代码库中唯一使用Apache commons日志记录完成日志记录的维护者.
所有类都包含这两个导入:
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
Run Code Online (Sandbox Code Playgroud)
然后很多类包含非静态日志实例化,如下所示:
/** The log. */
private Log log = LogFactory.getLog(Xyz.class);
Run Code Online (Sandbox Code Playgroud)
这可以证明是合理的吗?
我可以安全地将所有这些更改为静态调用吗?
编辑关于它(显然)方便的特殊情况:我的问题实际上是"整个代码库中的非静态日志是否合理?"
您必须非常小心地将非静态记录器初始化为您的代码片段在Serializable类中执行的方式.
首先因为Log不可序列化,所以任何序列化类的尝试都会失败.如果你声明你的记录器,transient那么合乎逻辑的做法是,你的log字段在反序列化后不会被初始化,所以你会NPE在尝试记录内容时花一些时间.不是很好的情况.
总而言之,如果您愿意,可以使用非静态记录器,但在使用它们之前确保它们已初始化.但除此之外,我不会担心非静态记录器,大多数日志记录实现总是会返回相同的记录器对象(log4j肯定会).