7.7.6 Java9新增的日志API
7.7.6 Java9新增的日志API
Java9
强化了原有的日志API
,这套日志API
只是定义了记录消息的最小API
,开发者可将这些日志消息路由到各种主流的日志框架(如SLF4J
、Log4J
等),否则默认使用Java
传统的java.util.logging
日志API
。
这套日志API
的用法非常简单,只要两步即可:
- 调用
System
类的getLogger(String name)
方法获取System.Logger
对象。 - 调用
System.Logger
对象的log()
方法输出日志。该方法的第一个参数用于指定日志级别。
为了与传统java.util.logging
日志级别、主流日志框架的级别兼容。Java9
定义了如下表所示的日志级别。
Java9 日志级别 |
对应的传统日志级别 | 说明 |
---|---|---|
ALL |
ALL |
最低级别,系统将会输出所有日志信息 。因此将会生成非常多、非常冗余的日志信息。 |
TRACE |
FINER |
输出系统的各种跟踪信息 ,也会生成很多、很冗余的日志信息 |
DEBUG |
FINE |
输出系统的各种调试信息 ,会生成较多的日志信息 |
INFO |
INFO |
输出系统内需要提示用户的提示信息, 生成中等冗余的日志信息 |
WARNING |
WARNING |
只输出系统内警告用户的警告信息 ,生成较少的日志信息 |
ERROR |
SEVERE |
只输出系统发生错误的错误信息,生成很少的日志信息 |
OFF |
OFF |
关闭日志输出 |
使用日志的好处
该日志级别是一个非常有用的东西:在开发阶段调试程序时,可能需要大量输出调试信息;在发布软件时,又希望关掉这些调试信息。此时就可通过日志来实现,只要将系统日志级别调高,所有低于该级别的日志信息就都会被自动关闭,如果将日志级别设为OFF
,那么所有日志信息都会被关闭。
示例 java9新增的日志API
例如,如下程序示范了Java9
新增的日志API
1 | import java.util.logging.*; |
Java9日志API国际化
除简单使用之外,Java9
的日志API
也支持国际化:System
类除使用简单的getLogger( String name)
方法获取System.Logger
对象之外,还可使用getLogger(String name, ResourceBundle bundle)
方法来获取该对象,该方法需要传入一个国际化语言资源包,这样该Logger
对象即可根据key
来输出国际化的日志信息。
先为美式英语环境提供一个logMess_en_US.properties
文件,该文件的内容如下:
1 | debug=Debug Message |
再为简体中文环境提供一个logMess_zh_CN.properties
文件,该文件的内容如下:
1 | debug=调试信息 |
接下来程序可使用ResourceBundle
先加载该国际化语言资源包,然后就可通过Java9
的日志API
来输出国际化的日志信息了:
1 | import java.util.logging.*; |
该程序与前一个程序的区别就是粗体字代码,这行粗体字代码获取System.Logger
时加载了ResourceBundle
资源包。接下来调用System.Logger
的log()
方法输出日志信息时,第二个参数应该使用国际化消息key
,这样即可输出国际化的日志信息。
在简体中文环境下运行该程序,将会看到a.xml
文件中的日志信息是中文信息;在美式英文环境下运行该程序,将会看到a.xml
文件中的日志信息是英文信息