在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。