💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# Java 日志 > 原文: [https://www.programiz.com/java-programming/logging](https://www.programiz.com/java-programming/logging) #### 在本教程中,我们将借助示例学习 Java 日志记录及其各种组件。 Java 允许我们通过日志记录过程来创建和捕获日志消息和文件。 在 Java 中,日志记录需要框架和 API。 Java 在`java.util.logging`包中具有内置的日志记录框架。 我们还可以将第三方框架(例如 Log4j,Logback 等)用于记录目的。 * * * ## Java 日志组件 下图表示 Java 日志记录 API(`java.util.logging`)的核心组件和控制流程。 ![The flow of control of Java Logging API](https://img.kancloud.cn/e9/7c/e97c331b116e7cc087eeec69056bdee8_1456x352.png "Java Logging") Java 日志 ### 1.记录器 `Logger`类提供了记录方法。 我们可以从`Logger`类实例化对象并调用其方法以进行记录。 让我们举个例子。 ```java Logger logger = Logger.getLogger("newLoggerName"); ``` `Logger`类的`getLogger()`方法用于查找或创建新的`Logger`。 字符串参数定义记录器的名称。 在这里,这将创建一个新的`Logger`对象或返回一个具有相同名称的现有`Logger`。 约定使用`class.getName()`在当前类之后定义`Logger`。 ```java Logger logger = Logger.getLogger(MyClass.class.getName()); ``` **注意**:如果传递的名称为`null`,则此方法将抛出`NullPointerException`。 每个`Logger`都有一个级别,该级别确定日志消息的重要性。 有 7 个基本日志级别: | 日志级别(降序) | 用途 | | --- | --- | | `SEVERE` | 严重失败 | | `WARNING` | 警告消息,潜在问题 | | `INFO` | 常规运行时信息 | | `CONFIG` | 配置信息 | | `FINE` | 常规开发人员信息(跟踪消息) | | `FINER` | 详细的开发人员信息(跟踪消息) | | `FINEST` | 高度详细的开发人员信息(跟踪消息) | | `OFF` | 关闭所有级别的日志记录(不捕获任何内容) | | `ALL` | 打开所有级别的日志记录(捕获所有内容) | 除了两个特殊的日志级别`OFF`和`ALL`之外,每个日志级别都有一个确定其严重性的整数值。 * * * ### 记录消息 默认情况下,始终会记录前三个日志级别。 要设置其他级别,我们可以使用以下代码: ```java logger.setLevel(Level.LogLevel); // example logger.setLevel(Level.FINE); ``` 在此示例中,仅级别`FINE`及其之上的级别被设置为记录。 所有其他日志消息均被删除。 现在要记录一条消息,我们使用`log()`方法。 ```java logger.log(Level.LogLevel, "log message"); // example logger.log(Level.INFO, "This is INFO log level message"); ``` 有一些用于记录所需级别的速记方法。 ```java logger.info( "This is INFO log level message"); logger.warning( "This is WARNING log level message"); ``` 然后,已通过设置的日志级别的所有日志请求都将转发到`LogRecord`。 **注意**:如果记录器的级别设置为`null`,则其级别将从其父级继承,依此类推。 * * * ### 2.筛选器 筛选器(如果存在)确定是否应转发`LogRecord`。 顾名思义,它会根据特定条件过滤日志消息。 `LogRecord`仅在通过指定条件时才从记录器传递到日志处理器,并从日志处理器传递到外部系统。 ```java // set a filter logger.setFilter(filter); // get a filter Filter filter = logger.getFilter(); ``` * * * ### 3.处理器(附加器) 日志处理器或附加程序将接收`LogRecord`,并将其导出到各种目标。 Java SE 提供了 5 个内置处理器: | 处理器 | 用途 | | --- | --- | | `StreamHandler` | 写入`OutputStream` | | `ConsoleHandler` | 写入控制台 | | `FileHandler` | 写入文件 | | `SocketHandler` | 写入远程 TCP 端口 | | `MemoryHandler` | 写入内存 | 处理器可以将`LogRecord`传递给过滤器,以再次确定是否可以将其转发到外部系统。 要添加新的处理器,我们使用以下代码: ```java logger.addHandler(handler); // example Handler handler = new ConsoleHandler(); logger.addHandler(handler); ``` 要删除处理器,我们使用以下代码: ```java logger.removeHandler(handler); // example Handler handler = new ConsoleHandler(); logger.addHandler(handler); logger.removeHandler(handler); ``` 一个记录器可以有多个处理器。 要获取所有处理器,我们使用以下代码: ```java Handler[] handlers = logger.getHandlers(); ``` * * * ### 4.格式化器 处理器还可以使用**格式化器**将`LogRecord`对象格式化为字符串,然后再将其导出到外部系统。 Java SE 具有两个内置的**格式化器**: | 格式化器 | 用途 | | --- | --- | | `SimpleFormatter` | 将`LogRecord`格式化为字符串 | | `XMLFormatter` | 将`LogRecord`格式转换为 XML 格式 | 我们可以使用以下代码来格式化处理器: ```java // formats to string form handler.setFormatter(new SimpleFormatter()); // formats to XML form handler.setFormatter(new XMLFormatter()); ``` * * * ## 日志管理器 `LogManager`对象跟踪全局日志记录信息。 它读取并维护日志记录配置和记录器实例。 日志管理器是单例,这意味着仅实例化了一个实例。 要获取日志管理器实例,我们使用以下代码: ```java LogManager manager = new LogManager(); ``` * * * ## 日志的优点 这是使用 Java 日志的一些优点。 * 帮助监控程序的流程 * 帮助捕获可能发生的任何错误 * 为问题诊断和调试提供支持