使用 JDK Logging
约 607 字大约 2 分钟
2025-07-15
在程序开发过程中,为了调试和追踪问题,通常需要查看程序运行时的变量值和执行流程。传统的 System.out.println()
方法虽然简单直接,但在实际应用中存在诸多不便。因此,使用日志(Logging)是一种更有效率的替代方案。
日志的目的是为了取代 System.out.println()
,它具有以下优势:
- 可定制的输出格式:可以灵活设置日志的输出样式,避免手动拼接字符串。
- 可配置的输出级别:可以根据需要设置不同的日志级别,控制输出信息的详细程度。例如,只输出错误日志,忽略调试信息。
- 日志重定向:可以将日志输出到文件,便于程序运行结束后进行分析和排错。
- 按包名控制日志级别:可以针对不同的包设置不同的日志级别,实现更精细化的日志管理。
7.1 如何使用 JDK Logging
Java 标准库内置了日志包 java.util.logging
,可以直接使用。
如下代码展示了 logging
的使用:
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.");
logger.severe("process will be terminated...");
}
}
运行上述代码,可以看到日志自动打印了时间、调用类和方法等信息,方便定位问题。
Jul 15, 2025 5:36:26 AM Main main
INFO: start process...
Jul 15, 2025 5:36:26 AM Main main
WARNING: memory is running out...
Jul 15, 2025 5:36:26 AM Main main
SEVERE: process will be terminated...
7.2 日志级别
JDK 的 Logging 定义了 7 个日志级别,从严重到普通依次为:
日志级别 | 描述 |
---|---|
SEVERE | 严重 |
WARNING | 警告 |
INFO | 信息 |
CONFIG | 配置 |
FINE | 细粒度日志 |
FINER | 较细粒度日志 |
FINEST | 最细粒度日志 |
默认级别是 INFO,因此,低于 INFO 级别的日志不会被打印出来。可以通过调整级别来控制日志输出的详细程度。
7.3 JDK Logging 的局限性
Java 标准库内置的 Logging 存在一些局限性:
- Logging 系统在 JVM 启动时读取配置文件并完成初始化,一旦
main()
方法开始运行,就无法修改配置。 - 配置不太方便,需要在 JVM 启动时传递参数
-Djava.util.logging.config.file=<config-file-name>
。
因此,JDK Logging 的使用不如其他日志系统广泛。