gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 11:30:08 27 4
gpt4 key购买 nike

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

    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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com