Java中如何通过Logger实现不同日志级别记录系统运行信息?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1006个文字,预计阅读时间需要5分钟。
Java 自带的日志记录器 `java.util.logging.Logger` 默认只输出 `INFO` 及以上级别(即 `WARNING`、`SEVERE`)的消息。默认情况下,`FINE`、`FINER`、`FINEST` 级别的日志会被过滤掉——这并非 bug,而是默认的 `Level` 配置限制。
要记录 `FINE` 及以上级别的日志,并确保日志可以被输出,必须显式设置 `Handler` 的级别,同时确保 `Logger` 本身也允许该级别的日志输出。
常见误区是只调用 logger.setLevel(Level.FINE) 却没改 ConsoleHandler 的级别,结果日志依然不输出。
-
SEVERE:严重错误,应用可能已不可用(如空指针导致核心流程中断) -
WARNING:潜在问题,但未中断执行(如配置项缺失,使用默认值) -
INFO:关键业务节点(如“订单创建成功”,“缓存刷新完成”) -
FINE:常规调试信息(如方法入参、SQL 执行前拼接结果) -
FINER:更细粒度追踪(如循环内每次迭代的中间状态) -
FINEST:高频/低价值细节(如网络请求每个 header 的收发)
如何让 FINE 级日志真正打印到控制台
必须同时设置 Logger 实例和它的 Handler(比如 ConsoleHandler)的级别,否则 Handler 会拦截掉低级别日志。
本文共计1006个文字,预计阅读时间需要5分钟。
Java 自带的日志记录器 `java.util.logging.Logger` 默认只输出 `INFO` 及以上级别(即 `WARNING`、`SEVERE`)的消息。默认情况下,`FINE`、`FINER`、`FINEST` 级别的日志会被过滤掉——这并非 bug,而是默认的 `Level` 配置限制。
要记录 `FINE` 及以上级别的日志,并确保日志可以被输出,必须显式设置 `Handler` 的级别,同时确保 `Logger` 本身也允许该级别的日志输出。
常见误区是只调用 logger.setLevel(Level.FINE) 却没改 ConsoleHandler 的级别,结果日志依然不输出。
-
SEVERE:严重错误,应用可能已不可用(如空指针导致核心流程中断) -
WARNING:潜在问题,但未中断执行(如配置项缺失,使用默认值) -
INFO:关键业务节点(如“订单创建成功”,“缓存刷新完成”) -
FINE:常规调试信息(如方法入参、SQL 执行前拼接结果) -
FINER:更细粒度追踪(如循环内每次迭代的中间状态) -
FINEST:高频/低价值细节(如网络请求每个 header 的收发)
如何让 FINE 级日志真正打印到控制台
必须同时设置 Logger 实例和它的 Handler(比如 ConsoleHandler)的级别,否则 Handler 会拦截掉低级别日志。

