使用JDK Logging


代码改好了怎么办?当然是删除没有用的System.out.println()语句了。

如果改代码又改出问题怎么办?再加上System.out.println()

反复这么搞几次,很快大家就发现使用System.out.println()非常麻烦。

怎么办?

解决方法是使用日志。

那什么是日志?日志就是Logging,它的目的是为了取代。

输出日志,而不是用System.out.println(),有以下几个好处:

  1. 可以设置输出样式,避免自己每次都写"ERROR: " + var
  2. 可以被重定向到文件,这样可以在程序运行结束后查看日志;
  3. 可以按包名控制日志级别,只输出某些包打的日志;
  4. 可以……

总之就是好处很多啦。

因为Java标准库内置了日志包java.util.logging,我们可以直接用。先看一个简单的例子:

运行上述代码,得到类似如下的输出:

对比可见,使用日志最大的好处是,它自动打印了时间、调用类、调用方法等很多有用的信息。

再仔细观察发现,4条日志,只打印了3条,没有打印。这是因为,日志的输出可以设定级别。JDK的Logging定义了7个日志级别,从严重到普通:

  • SEVERE
  • INFO
  • CONFIG
  • FINE
  • FINER

因为默认级别是INFO,因此,INFO级别以下的日志,不会被打印出来。使用日志级别的好处在于,调整级别,就可以屏蔽掉很多调试相关的日志输出。

使用Java标准库内置的Logging有以下局限:

Logging系统在JVM启动时读取配置文件并完成初始化,一旦开始运行main()方法,就无法修改配置;

因此,Java标准库内置的Logging使用并不是非常广泛。更方便的日志系统我们稍后介绍。

使用logger.severe()打印异常:

使用JDK Logging - 图2

下载练习: (推荐使用IDE练习插件快速下载)

日志是为了替代System.out.println(),可以定义格式,重定向到文件等;

日志可以存档,便于追踪问题;

日志记录可以按级别分类,便于打开或关闭某些级别;

可以根据配置文件调整日志,无需修改代码;

使用JDK Logging - 图4