- java.lang.Object
-
- java.lang.System.LoggerFinder
-
- Enclosing class:
- System
public abstract static class System.LoggerFinderextends 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
-
-
构造方法摘要
构造方法 变量 构造器 描述 protected
LoggerFinder()
创建LoggerFinder
的新实例。
-
方法摘要
所有方法 静态方法 实例方法 抽象方法 具体的方法 变量和类型 方法 描述 System.Logger
getLocalizedLogger(String name, ResourceBundle bundle, 模块 module)
返回一个本地化的实例Logger
对于给定的模块
。abstract System.Logger
getLogger(String name, 模块 module)
返回的实例Logger
对于给定的模块
。static System.LoggerFinder
getLoggerFinder()
返回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")
。
-
-