在 java 中使用 jul (java.util.logging) 记录日志,核心是获取 logger 实例并调用其 info、warning 等方法。默认情况下,jul 会向控制台输出日志,通过配置 logging.properties 文件可以控制日志级别和格式。开发者只需导入 java.util.logging.logger 包,即可在项目中进行日志记录。

JUL Logger 的层级结构是怎样的
JUL 采用树状层级结构管理 Logger,根 Logger 名为 "",子 Logger 名称通常以父级名称加点分隔(如 com.example.app)。这种结构允许日志配置从父级继承到子级,便于统一管理不同模块的日志行为。

import java.util.logging.Logger;
public class JulHierarchyDemo {
public static void main(String[] args) {
// 获取根 Logger
Logger root = Logger.getLogger("");
System.out.println("Root Logger Name: " + root.getName());
// 获取子 Logger
Logger child = Logger.getLogger("com.example.app");
System.out.println("Child Logger Name: " + child.getName());
// 验证父子关系
System.out.println("Is child's parent root? " + (child.getParent() == root));
}
}
运行上述代码将输出: Root Logger Name: Child Logger Name: com.example.app Is child's parent root? true
JUL Handler 如何配置输出目标
JUL 使用 Handler 决定日志输出的目的地,常见的有 ConsoleHandler(输出到控制台)和 FileHandler(输出到文件)。每个 Logger 可以关联多个 Handler,从而实现同时输出到多个目标。

import java.util.logging.*;
import java.io.IOException;
public class JulHandlerDemo {
public static void main(String[] args) throws IOException {
Logger logger = Logger.getLogger(JulHandlerDemo.class.getName());
// 添加 ConsoleHandler
ConsoleHandler consoleHandler = new ConsoleHandler();
consoleHandler.setLevel(Level.INFO);
logger.addHandler(consoleHandler);
// 添加 FileHandler
FileHandler fileHandler = new FileHandler("app.log", true);
fileHandler.setLevel(Level.ALL);
logger.addHandler(fileHandler);
logger.info("This message goes to both console and file.");
}
}
运行后,控制台会打印 INFO 级别以上的日志,同时在当前目录生成 app.log 文件,记录所有级别的日志。
如何自定义 JUL 日志格式
JUL 支持通过 SimpleFormatter 或自定义 Formatter 来改变日志输出格式。可以通过设置 Handler 的 formatter 属性来自定义日期、时间、日志级别、消息内容等元素的显示方式。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











