模块  java.base
软件包  java.lang

Class System.LoggerFinder

  • Enclosing class:
    System

    public abstract static class System.LoggerFinder
    extends Object
    LoggerFinder服务负责为其使用的基础框架创建,管理和配置记录器。 记录器查找器是此类的具体实现,它具有零参数构造函数并实现此类定义的抽象方法。 从记录器查找器返回的记录器能够将日志消息路由到此提供程序支持的日志记录后端。 给定的Java Runtime调用维护一个系统范围的LoggerFinder实例,该实例按如下方式加载:
    • 首先,它使用ServiceLoader设施和system class loader找到任何自定义LoggerFinder提供商。
    • 如果未找到LoggerFinder提供程序,将使用系统默认LoggerFinder实现。

    即使存在java.logging模块 ,应用程序也可以通过简单地提供和声明System.LoggerFinder服务的实现来替换日志记录后端。

    默认实施

    java.logging模块存在时,系统默认LoggerFinder实现使用java.util.logging作为后端框架。 它返回一个logger实例,它将日志消息路由到java.util.logging.Logger 否则,如果java.logging不存在,则默认实现将返回一个简单的记录器实例,该实例将INFO级别及以上的日志消息路由到控制台( System.err )。

    记录配置

    LoggerFinder工厂方法获得的Logger实例不能由应用程序直接配置。 配置是底层日志记录后端的责任,通常需要使用特定于该后端的API。

    对于使用java.util.logging作为其后端的默认LoggerFinder实现,请参阅java.util.logging以获取日志记录配置。 对于缺少java.logging模块时返回简单记录器的默认LoggerFinder实现,配置与实现有关。

    通常,使用日志记录框架的应用程序将通过该框架定义(或支持)的记录器外观记录消息。 希望使用外部框架的应用程序应记录与该框架关联的外观。

    需要记录消息的系统类通常会获得System.Logger实例,以将消息路由到应用程序选择的日志记录框架。

    只需要记录器来生成日志消息的库和类不应该尝试自己配置记录器,因为这会使它们依赖于LoggerFinder服务的特定实现。

    此外,当存在安全管理器时,不应通过日志记录后端直接配置提供给系统类的记录器,而无需权限。
    具体LoggerFinder实现的提供者有责任确保在没有适当权限检查的情况下不通过不受信任的代码配置这些记录器,因为在此类记录器上执行的配置通常会影响同一Java运行时中的所有应用程序。

    消息级别和映射到后端级别

    记录器查找器负责从System.Logger.Level映射到它使用的日志记录后端支持的级别。
    使用java.util.logging作为后端的默认LoggerFinder将System.Logger级别映射到java.util.logging级别的相应严重性 - 如Logger.Level中所述

    从以下版本开始:
    9
    另请参见:
    SystemSystem.Logger
    • 构造方法详细信息

      • LoggerFinder

        protected LoggerFinder()
        创建 LoggerFinder的新实例。
        Implementation Note:
        建议 LoggerFinder服务实现不在其构造函数中执行任何繁重的初始化,以避免在服务提供者实例化期间出现死锁或类加载周期的可能风险。
        异常
        SecurityException - 如果存在安全管理器且其 checkPermission方法不允许 RuntimePermission("loggerFinder")
    • 方法详细信息

      • getLogger

        public abstract System.Logger getLogger​(String name,
                                                模块 module)
        返回的实例Logger对于给定的模块
        参数
        name - 记录器的名称。
        模块 - 正在为其请求记录器的模块。
        结果
        a logger适用于给定模块。
        异常
        NullPointerException - 如果 namenull模块null
        SecurityException - 如果存在安全管理器且其 checkPermission方法不允许 RuntimePermission("loggerFinder")
      • getLocalizedLogger

        public System.Logger getLocalizedLogger​(String name,
                                                ResourceBundle bundle,
                                                模块 module)
        返回一个本地化的实例Logger对于给定的模块 返回的记录器将使用提供的资源包进行消息本地化。
        实现要求:
        默认情况下,此方法调用this.getLogger(name, module)以获取记录器,然后将该记录器包装在System.Logger实例中,其中所有未将ResourceBundle作为参数的方法重定向到一个 - 通过给定的bundle进行本地化。 因此,例如,对Logger.log(Level.INFO, msg)的调用将最终作为对包装的记录器实例的Logger.log(Level.INFO, bundle, msg, (Object[])null)的调用。 但请注意,默认情况下, Supplier<String>返回的字符串消息不会被本地化,因为假设此类字符串是已构造的消息,而不是资源包中的键。

        LoggerFinder的实现可以覆盖此方法,例如,当底层日志记录后端提供其自己的用于本地化日志消息的机制时,则这样的LoggerFinder可以自由地返回直接使用后端提供的机制的记录器。

        参数
        name - 记录器的名称。
        bundle - 资源包; 可以是null
        模块 - 正在为其请求记录器的模块。
        结果
        Logger一个实例,它将使用提供的资源包进行消息本地化。
        异常
        NullPointerException - 如果 namenull模块null
        SecurityException - 如果存在安全管理器且其 checkPermission方法不允许 RuntimePermission("loggerFinder")
      • getLoggerFinder

        public static System.LoggerFinder getLoggerFinder()
        返回LoggerFinder实例。 Java Runtime中有一个系统范围的单个LoggerFinder实例。 请参阅LoggerFinder实现的定位和加载方法的类规范。
        结果
        LoggerFinder实例。
        异常
        SecurityException - 如果存在安全管理器且其 checkPermission方法不允许 RuntimePermission("loggerFinder")