- java.lang.Object
-
- java.lang.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
- 另请参见:
-
System,System.Logger
-
-
构造方法摘要
构造方法 变量 构造器 描述 protectedLoggerFinder()创建LoggerFinder的新实例。
-
方法摘要
所有方法 静态方法 实例方法 抽象方法 具体的方法 变量和类型 方法 描述 System.LoggergetLocalizedLogger(String name, ResourceBundle bundle, 模块 module)返回一个本地化的实例Logger对于给定的模块。abstract System.LoggergetLogger(String name, 模块 module)返回的实例Logger对于给定的模块。static System.LoggerFindergetLoggerFinder()返回LoggerFinder实例。
-
-
-
构造方法详细信息
-
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- 如果name是null或模块是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- 如果name是null或模块是null。 -
SecurityException- 如果存在安全管理器且其checkPermission方法不允许RuntimePermission("loggerFinder")。
-
getLoggerFinder
public static System.LoggerFinder getLoggerFinder()
- 结果
-
LoggerFinder实例。 - 异常
-
SecurityException- 如果存在安全管理器且其checkPermission方法不允许RuntimePermission("loggerFinder")。
-
-