- java.lang.Object
-
- java.lang.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.Logger
的logger实例。 否则,如果不存在java.logging
,则默认实现将返回一个简单的记录器实例,将将INFO
及以上级别的日志消息路由到控制台(System.err
)。日志记录配置
Logger从
LoggerFinder
工厂获取的实例不能直接由应用程序配置。 配置是底层日志后端的责任,通常需要使用特定于该后端的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
- 另请参见:
-
System
,System.Logger
-
-
构造方法摘要
构造方法 Modifier Constructor 描述 protected
LoggerFinder()
创建一个新的实例LoggerFinder
。
-
方法摘要
所有方法 静态方法 接口方法 抽象方法 具体的方法 Modifier and Type 方法 描述 System.Logger
getLocalizedLogger(String name, ResourceBundle bundle, Module module)
返回一个本地化的实例Logger
对于给定module
。abstract System.Logger
getLogger(String name, Module module)
为给定的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 module)
为给定的module
返回一个Logger
的实例。- 参数
-
name
- 记录器的名称。 -
module
- 正在请求记录器的模块。 - 结果
-
一个适合在给定模块内使用的
logger
。 - 异常
-
NullPointerException
- 如果name
是null
或module
是null
。 -
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
- 如果name
为null
或module
为null
。 -
SecurityException
- 如果存在安全管理员,并且其checkPermission
方法不允许RuntimePermission("loggerFinder")
。
-
getLoggerFinder
public static System.LoggerFinder getLoggerFinder()
- 结果
-
LoggerFinder
实例。 - 异常
-
SecurityException
- 如果安全管理器存在,并且其checkPermission
方法不允许RuntimePermission("loggerFinder")
。
-
-