首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Logger.getGlobal()和Logger.getAnonymousLogger()之间的区别?

Logger.getGlobal()和Logger.getAnonymousLogger()之间的区别?
EN

Stack Overflow用户
提问于 2017-10-23 11:24:40
回答 1查看 1.9K关注 0票数 0

下面是我的示例代码:

代码语言:javascript
复制
public class Logs {
    private static Logs logHandler;

    public static Logs handler() {
        if (null == logHandler) {
            logHandler = new Logs();
        }
        return logHandler;
    }

    public void logError(String message) {
        Logger.getGlobal().log(Level.SEVERE, message);
    }
}

我并不真正理解这两者之间的区别,因为它们提供了完全相同的输出:

代码语言:javascript
复制
Logger.getGlobal.log(Level.SEVERE, message);

以及:

代码语言:javascript
复制
Logger.getAnonymousLogger.log(Level.SEVERE, message);

有人能告诉我他们的不同之处吗,这样我就知道我该用哪一种?

提前谢谢你!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-23 14:52:03

匿名记录器没有名称,这意味着不能将记录器名称用作格式化模式。匿名记录器不执行安全检查,这意味着任何代码都可以更改匿名记录器的设置。

全局记录器只是System.out (更确切地说是日志记录API )。它是一个命名的记录器,如果代码试图修改设置,它将执行安全检查。

文档建议您在可能的情况下使用命名伐木者

来自名字文档:

“全局”Logger对象是为了方便开发人员随意使用日志包而提供的。正在认真使用日志程序包(例如在产品中)的开发人员应该创建和使用自己的Logger对象,并使用适当的名称,这样日志记录就可以控制在合适的每个Logger粒度上。开发人员还需要保持对他们的Logger对象的强烈引用,以防止垃圾收集。

来自getAnonymousLogger​()文档:

创建一个匿名日志。新创建的Logger没有在LogManager命名空间中注册。对记录器的更新将不进行访问检查。 此工厂方法主要用于小程序。因为生成的Logger是匿名的,所以它可以由创建类保持私有。这样就不需要进行正常的安全检查,从而允许不受信任的applet代码更新Logger的控制状态。例如,applet可以在匿名日志上执行setLevel或addHandler。 尽管新的记录器是匿名的,但它被配置为以根记录器("")作为其父记录程序。这意味着默认情况下,它从根记录器继承其有效级别和处理程序。通过setParent方法更改其父程序仍然需要该方法指定的安全权限。

此外,如果要保留示例类,请通过创建一个静态的最终字段,确保保持对全局记录器的强引用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46888178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档