但问题出现问题时,最简单的方式就是使用 System.out.println 来打印一些变量来检查是哪里出了问题。但是一旦发现问题的根源,就要将这些语句从代码中删去。这样做未免有点麻烦。记录日志API就是为了解决这个问题而设计的。
日志的优点:

  • 可以很容易地取消全部日志记录,或者仅仅取消某个级别的日志,而且打开和关闭这个操作也很容易。
  • 可以很简单地禁止日志记录的输出,因此,将这些日志代码留在程序中的开销很小。
  • 日志记录可以被定向到不同的处理器,用于在控制台中显示,用于存储在文件中等。
  • 日志记录器和处理器都可以对记录进行过滤。过滤器可以根据过滤实现器制定的标准丢弃那些无用的记录项。
  • 日志记录可以采用不同的方式格式化,例如,纯文本或XML。
  • 在默认情况下,日志系统的配置由配置文件控制。如果需要的话,应用程序可以替换这个配置。

    基本日志

    可以使用全局日志记录器,来调用日志方法: ``` import java.util.logging.Level; import java.util.logging.Logger;

public class Hello { public static void main(String[] args) { Logger logger = Logger.getGlobal(); logger.info(“start process…”); logger.warning(“memory is running out…”); logger.fine(“ignored.”); // no print logger.severe(“process will be terminated…”); } }

  1. > 未被任何变量引用的日志记录器可能会被垃圾回收。为了防止这种情况发生,用一个静态变量存储日志记录器的一个引用。
  2. JDK logging 有七个级别:SEVERE, WARNING, INFO, CONFIG, FINE, FINER, FINEST 。在默认情况下,只记录前三个级别。可以使用 `setLevel(Level.FINE)` 来设置其他级别。<br />默认的配置文件在 `jre/lib/logging.properties` ,可以去对应位置配置日志文件。<br />使用 Java 标准库内置的 Logging 有以下局限:
  3. - Logging 系统在 JVM 启动时读取配置文件并完成初始化,一旦开始运行 `main()` 方法,就无法修改配置;
  4. - 配置不太方便,需要在 JVM 启动时传递参数 `-Djava.util.logging.config.file=`
  5. 因此,Java 标准库内置的 Logging 使用并不是非常广泛。<br />我们可以选择 [Commons Logging](https://commons.apache.org/proper/commons-logging/download_logging.cgi) 加 [Log4j](c73a200a255276b05d35d531ed510ac9) 这个组合来达到对应的效果。<br />这两个都是第三方日志库,所以需要下载他们。Commons Logging 更多的是作为一个「日志接口」来使用,真正的「日志实现可以使用 Log4j」。<br />根据上面给的连接下载对应的压缩包,解压缩,取出里面的对应文件:

commons-logging-1.2.jar log4j-api-2.x.jar log4j-core-2.x.jar log4j-jcl-2.x.jar

  1. 将上述对应文件放到 classpath 中,就可以开始写代码了:

import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory;

public class Main { public static void main(String[] args) { Log log = LogFactory.getLog(Main.class); log.info(“start…”); log.warn(“end.”); } }

  1. 如果仅仅使用 Commons Logging ,打印出来将会是这样的:

Mar 02, 2019 7:15:31 PM Main main INFO: start… Mar 02, 2019 7:15:31 PM Main main WARNING: end.

  1. 当然,最佳时间是配合 Log4j 一起使用,在使用 Log4j 之前,需要通过配置文件来配置它,这里使用 XML:<br />_log4j2.xml_

<?xml version=”1.0” encoding=”UTF-8”?>

%d{MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36}%n%msg%n%n log/err.log log/err.%i.log.gz
  1. 将上述文件放到 classpath 中,在运行上述代码,将会输出:

08-10 11:00:26.635 [main] INFO Main start…

08-10 11:00:26.641 [main] WARN Main end.

``` 可以看到不太相同。虽然配置Log4j比较繁琐,但一旦配置完成,使用起来就非常方便。
另外日志配置还有一对好基友:SLF4J 和 Logback。