java - 记录器是否应该是私有(private)静态的

标签 java logging

记录器是否应该被声明为静态的?通常我见过两种类型的记录器声明:

    protected Log log = new Log4JLogger(aClass.class);

    private static Log log = new Log4JLogger(aClass.class);

应该使用哪一个?两者的优缺点是什么?

最佳答案

非静态形式的优点是您可以在(抽象)基类中声明它,如下所示,而不必担心会使用正确的类名:

protected Log log = new Log4JLogger(getClass());

但是它的缺点显然是会为类的每个实例创建一个全新的记录器实例。这本身可能并不昂贵,但会增加大量开销。如果您想避免这种情况,您想改用 static 表单。但它的缺点是你必须在每个单独的类中声明它,并在每个类中注意在构造记录器期间使用正确的类名,因为 getClass() 不能在静态上下文中使用。但是,在一般的 IDE 中,您可以为此创建一个自动完成模板。例如。 logger + ctrl+空格.

另一方面,如果您通过工厂获取记录器,而工厂又可能缓存已经实例化的记录器,那么使用非静态形式不会增加太多开销。例如,Log4j 有一个 LogManager为此目的。

protected Log log = LogManager.getLogger(getClass());

关于java - 记录器是否应该是私有(private)静态的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3842823/

相关文章:

java - SmartGWT 模态窗口

mysql - 尝试更改 bin 日志目录 : mysql-bin. 未找到索引 (Errcode: 13)

c# - 如何以编程方式记录 PerformanceCounter

java - 在Activiti中获取带有服务任务的流程图

Truncate中的MySql通用查询日志文件名

java - java中记录器的替代方案

logging - Prestashop - 我如何写入日志文件?

session 类上的 java.lang.NullPointerException

java - Android App判断是否有连接

java - INSERT 中的 Mysql 错误 'field list' 中的未知列