网站菜单

JDK1.8(五) 断言与日志

(一)断言

断言的作用:

断言(Assertion)是一种调试程序的方式。在Java中,使用assert关键字来实现断言。

断言可以用于开发和调试阶段:
assert x >= 0 : "x must >= 0";
当x不符合x>=0时,会断言失败抛出异常。

但是注意:断言在编译器中是默认关闭的,应该只用于开发和测试阶段,向用户抛出断言异常是不合理的行为。
因此在日常开发中,断言使用的频率并不高。

(二)日志

日志就是Longging,他出现的目的是为了取代System.out.println();

使用日志的好处:
  • 可以设置输出样式,避免自己每次都写"ERROR: " + var;
  • 可以设置输出级别,禁止某些级别输出。例如,只输出错误日志;
  • 可以被重定向到文件,这样可以在程序运行结束后查看日志;
  • 可以按包名控制日志级别,只输出某些包打的日志;

java标准库中内置了日志包:java.util.logging

import java.util.logging.Logger;

public class Assertion {
    public static void main(String[] args) {
        Logger logger = Logger.getGlobal();
        logger.info("start process...");
        logger.warning("memory is running out...");
        logger.fine("ignored.");
        logger.severe("process will be terminated...");
    }
}

输出这样一段信息:

二月 23, 2021 2:29:57 下午 com.utils.Assertion main
信息: start process...
二月 23, 2021 2:29:57 下午 com.utils.Assertion main
警告: memory is running out...
二月 23, 2021 2:29:57 下午 com.utils.Assertion main
严重: process will be terminated...

他自动打印了时间、调用类、调用方法等信息
从输出结果中我们可以看到,fine并没有输出语句,这是因为Logging中定义了七个日志级别。
从严重到普通分别为:

  • SEVERE
  • WARNING
  • INFO
  • CONFIG
  • FINE
  • FINER
  • FINEST
    其中日志默认的级别为INFO,因此级别低于INFO的日志不会被打印。

(三)Commons Logging

这是一个第三方日志库,它是由Apache创建的日志模块。
Commons Logging的特色是,它可以挂接不同的日志系统,并通过配置文件指定挂接的日志系统。默认情况下,Commons Loggin自动搜索并使用Log4j(Log4j是另一个流行的日志系统),如果没有找到Log4j,再使用JDK Logging。

Commons Logging定义了6个日志级别:

  • FATAL
  • ERROR
  • WARNING
  • INFO
  • DEBUG
  • TRACE
    默认的级别依然是INFO

此外,Commons Logging的日志方法,例如info(),除了标准的info(String)外,还提供了一个非常有用的重载方法:info(String, Throwable),这使得记录异常更加简单:

try {
    ...
} catch (Exception e) {
    log.error("got exception!", e);
}

这样可以简洁的在日志中打印catch出异常。

在苍穹模块中ERRO级别的日志会输出到文件中。

相关推荐

JDK1.8(六) 反射

(一)什么是反射 除了基本类型外,所有的数据类型全部都是class 因此,每加载一个Class,就会创建一个实例对象,而一个Class实例中就记录了这个对象的所有信息。包括接口,所有方法,字段,父类等…

JAVA中常用的包的作用

包名 说明 java.lang 该包提供了Java编程的基础类,例如 Object、Math、String、StringBuffer、System、Thread等,不使用该包就很难编写Java代码了。…