日志 API 的优点:
- 可以很容易地取消全部日志记录, 或者仅仅取消某个级别的日志, 而且打开和关闭这个操作也很容易 。
- 可以很简单地禁止日志记录的输出, 因此, 将这些日志代码留在程序中的开销很小 。
- 日志记录可以被定向到不同的处理器, 用于在控制台中显示, 用于存储在文件中等 。
- 日志记录器和处理器都可以对记录进行过滤 。 过滤器可以根据过滤实现器制定的标准丢弃那些无用的记录项 。
- 日志记录可以采用不同的方式格式化, 例如, 纯文本或 XML 。
- 应用程序可以使用多个日志记录器 , 它们使用类似包名的这种具有层次结构的名字,例如 , com.mycompany .myapp。
- 在默认情况下 , 日志系统的配置由配置文件控制 。 如果需要的话, 应用程序可以替换这个配置 。
基本日志:
要生成简单的日志记录, 可以使用全局日志记录器 (global logger ) 并调用其 info 方法 :
public static void main(String[] args) {
Logger globalLogger = Logger.getGlobal(); // 获得全局日志记录器
globalLogger.setLevel(Level.OFF); // 关闭日志
// 记录日志
globalLogger.info("File-Open menu item selected!");
// 二月 17, 2019 5:59:09 下午 com.chapter7.LogLearnMain main
// 信息: File-Open menu item selected!
globalLogger.setLevel(Level.ALL); // 开启记录所有类型的记录
globalLogger.warning("user no login!");
// 最终输出以下内容:
// 二月 17, 2019 6:07:55 下午 com.chapter7.LogLearnMain main [时间、 所在的类名及方法名]
// 警告: user no login! [日志级别、日志信息]
}
高级日志
在一个专业的应用程序中,通常是不会将所有的日志都记录到一个全局日志记录器中,而是可以自定义日志记录器。
1. 创建或获取日志记录器
private static final Logger myLogger = Logger.getLogger("com.mycompany.myapp");
/* 未被任何变量引用的日志记录器可能会被垃圾回收。为了防止这中情况的发生,
要像上面的例子中一样,用一个静态变量存储日志记录器的一个引用。
*/
与包名类似,日志记录器也具有层次结构。事实上,与包名相比,日志记录器的层次结构性更强。 对于包来说 , 一个包的名字与其父包的名字之间没有语义关系, 但是日志记录器的父与子之间将共享某些属性 。例如 , 如果对 com.mycompany 日志记录器设置了日志级别 ,它的子记录器也会继承这个级别 ,
通常日志级别有以下七个:【从左到右级别依次降低,详细程度依次增加】
SEVERE、WARING、INFO、CONFIG、FINE、FINER、FINEST
默认情况下只记录前三个级别【即:SEVERE、WARING、INFO】。
2. 更改日志记录级别:
// 更改日志记录级别
logger.setLevel(Level.FINE); // 现在可以记录【SEVERE、WARING、INFO、CONFIG、FIINE】
// 关闭日志记录
logger.setLevel(Level.OFF);
// 开启所有级别
logger.setLevel(Level.ALL);
3. 记录日志
// way 1
logger.waring(message); //