4

java.util.logging日志框架中有一个名为 的特殊Logger实例"global",但我找不到任何关于其预期用途的文档。Logger.getGlobal()只是说的文档

返回名称为 的全局记录器对象Logger.GLOBAL_LOGGER_NAME

Logger.GLOBAL_LOGGER_NAME,反过来,仅记录为

GLOBAL_LOGGER_NAME是全局记录器的名称。

我相当广泛的搜索没有找到任何更有用的文档。

全局记录器的用途是什么?这是否记录在我错过的某个地方?

4

2 回答 2

9

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

这里开始(不要看该字段已被弃用的事实,我只是想向您指出一个有效的解释)。

通常,在应用程序中启用日志记录时,您通常会定义更精细的记录器,通常是每个 Java 包或类。

如果您不想这样做,您可以使用这个全局记录器,它将处理所有记录语句,无论它们包含在哪个库、包或类中。

于 2013-11-13T00:05:15.727 回答
2

我认为主要问题不是“为什么我们有全局记录器”,而是“为什么我们有类指定的记录器并使用 getLogger() 方法以及为什么我们使用它 - Logger.getLogger("package.className");'

答案是为了方便我们使用名为 loggers 的类,例如,您想记录某个特定的类,并且您想在此类上使用调试级别,在其他类上使用信息级别,要仅查看来自此类的调试消息,您可以调整日志记录仅调试此类的属性。

您也可以有一些抽象类,其中可能有一些记录器,并且您可能不想在所有继承的类中使用相同的记录器,您可能希望在继承的类中覆盖记录器并为其使用一些特定的级别。

我相信这非常有用。并回答你的问题,如果你有一个小项目,并且你不想使用名为 loggers 的类,并且只使用一个全局记录器,那么你可以通过运行 Logger.getGlobal(); 来使用这个 Logger;

于 2016-10-07T12:51:30.730 回答