Module  java.base
软件包  java.lang

Class System.LoggerFinder

  • Enclosing class:
    System


    public abstract static class System.LoggerFinder
    extends Object
    LoggerFinder服务负责创建,管理和配置记录器到其使用的基础框架。

    logger finder是一个具有零参数构造函数的类的具体实现,并实现了该类定义的抽象方法。 从记录器查找器返回的记录器能够将日志消息路由到该提供商支持的日志记录后端。 给定的Java运行时调用维护一个单一的系统范围的LoggerFinder实例,其加载如下:

    • 首先,它找到任何自定义的LoggerFinder提供商使用ServiceLoader工具与system class loader
    • 如果没有找到LoggerFinder提供程序,系统将默认使用LoggerFinder实现。

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

    默认实现

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

    日志记录配置

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

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

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

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

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

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

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

    记录器查找器负责从System.Logger.Level映射到其使用的日志记录后端支持的级别。
    默认LoggerFinder使用java.util.logging作为后端映射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 module)
        为给定的module返回一个Logger的实例。
        参数
        name - 记录器的名称。
        module - 正在请求记录器的模块。
        结果
        一个适合在给定模块内使用的logger
        异常
        NullPointerException - 如果 namenullmodulenull
        SecurityException - 如果存在安全管理员,并且其 checkPermission方法不允许 RuntimePermission("loggerFinder")
      • getLocalizedLogger

        public System.Logger getLocalizedLogger​(String name,
                                                ResourceBundle bundle,
                                                Module module)
        返回一个本地化的实例Logger对于给定module 返回的记录器将使用提供的资源束进行消息定位。
        实现要求:
        默认情况下,此方法调用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
        module - 正在请求记录器的模块。
        结果
        一个Logger的实例,它将使用提供的资源束进行消息定位。
        异常
        NullPointerException - 如果 namenullmodulenull
        SecurityException - 如果存在安全管理员,并且其 checkPermission方法不允许 RuntimePermission("loggerFinder")
      • getLoggerFinder

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