【问题标题】:In java.util.logging, what is the global logger for?在 java.util.logging 中,全局记录器有什么用?
【发布时间】:2013-11-25 09:21:05
【问题描述】:

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

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

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

GLOBAL_LOGGER_NAME 是全局记录器的名称。

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

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

【问题讨论】:

    标签: java logging java.util.logging


    【解决方案1】:

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

    来自here(不要看该字段已被弃用的事实,我只是想为您指出一个有效的解释)。

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

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

    【讨论】:

    • 当然,唯一真正的文档是我完全忽略的字段,因为它被标记为已弃用。感谢您指出这一点。
    【解决方案2】:

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

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

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

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

    【讨论】:

    • 这不是@Andrei 接受的答案已经说过了吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-16
    • 1970-01-01
    • 2023-02-01
    • 2014-09-16
    • 1970-01-01
    • 2011-07-04
    相关资源
    最近更新 更多