下面是我的示例代码:
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);
}
}我并不真正理解这两者之间的区别,因为它们提供了完全相同的输出:
Logger.getGlobal.log(Level.SEVERE, message);以及:
Logger.getAnonymousLogger.log(Level.SEVERE, message);有人能告诉我他们的不同之处吗,这样我就知道我该用哪一种?
提前谢谢你!
发布于 2017-10-23 14:52:03
匿名记录器没有名称,这意味着不能将记录器名称用作格式化模式。匿名记录器不执行安全检查,这意味着任何代码都可以更改匿名记录器的设置。
全局记录器只是System.out (更确切地说是日志记录API )。它是一个命名的记录器,如果代码试图修改设置,它将执行安全检查。
文档建议您在可能的情况下使用命名伐木者。
来自名字文档:
“全局”Logger对象是为了方便开发人员随意使用日志包而提供的。正在认真使用日志程序包(例如在产品中)的开发人员应该创建和使用自己的Logger对象,并使用适当的名称,这样日志记录就可以控制在合适的每个Logger粒度上。开发人员还需要保持对他们的Logger对象的强烈引用,以防止垃圾收集。
创建一个匿名日志。新创建的Logger没有在LogManager命名空间中注册。对记录器的更新将不进行访问检查。 此工厂方法主要用于小程序。因为生成的Logger是匿名的,所以它可以由创建类保持私有。这样就不需要进行正常的安全检查,从而允许不受信任的applet代码更新Logger的控制状态。例如,applet可以在匿名日志上执行setLevel或addHandler。 尽管新的记录器是匿名的,但它被配置为以根记录器("")作为其父记录程序。这意味着默认情况下,它从根记录器继承其有效级别和处理程序。通过setParent方法更改其父程序仍然需要该方法指定的安全权限。
此外,如果要保留示例类,请通过创建一个静态的最终字段,确保保持对全局记录器的强引用。
https://stackoverflow.com/questions/46888178
复制相似问题