在java.util.logging中,什么是全局记录器?

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

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

反过来, Logger.GLOBAL_LOGGER_NAME仅记录为

GLOBAL_LOGGER_NAME是全局记录器的名称。

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

什么是全球记录器用于? 这是在我遗漏的地方记录的吗?

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

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

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

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

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

答案是我们使用类命名记录器以方便起见,例如,您想要记录某些特定的类,并且您希望在此类和其他类的信息级别上使用调试级别,只能从此类查看调试消息,您可以调整日志记录仅调试此类的属性。

你也可以有一些抽象类,里面可能有一些记录器,你可能不想在所有inheritance的类中使用相同的记录器,你可能想要在你inheritance的类中覆盖logger并为它使用一些特定的级别。

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