亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> java

精通 Java 日志记录:基础组件与最佳实践

Java 日志记录基础

本教程通过示例学习 Java Logging 及其各组件。

Java 允许通过日志记录过程创建和捕获日志消息与文件。

Java 日志需要框架和 API。Java 在 java.util.logging 包内置了日志框架。

也可使用第三方框架如 Log4j、Logback 等进行日志记录。


Java 日志组件

下图展示 Java Logging API (java.util.logging) 的核心组件与控制流。

精通 Java 日志记录:基础组件与最佳实践

1. Logger

Logger 类提供日志记录方法。可实例化 Logger 对象并调用其方法记录日志。

示例:

Logger logger = Logger.getLogger("newLoggerName"); 

Logger 类的 getLogger() 方法用于查找或创建新 Logger。字符串参数定义日志记录器名称。

此处创建新 Logger 对象或返回同名的现有 Logger。

惯例使用 class.getName() 以当前类名定义 Logger。

Logger logger = Logger.getLogger(MyClass.class.getName()); 

注意: 传入名称为 null 时抛出 NullPointerException。

每个 Logger 有级别决定日志消息重要性。共有 7 个基本日志级别:

日志级别(按严重度降序)用途
SEVERE严重失败
WARNING警告消息,潜在问题
INFO通用运行时信息
CONFIG配置信息
FINE通用开发者信息(跟踪消息)
FINER详细开发者信息(跟踪消息)
FINEST高度详细开发者信息(跟踪消息)
OFF关闭所有级别日志(不捕获任何内容)
ALL开启所有级别日志(捕获所有内容)

除 OFF 和 ALL 两个特殊级别外,每个日志级别有整数值表示严重程度。


记录日志消息

默认记录前三个级别。设置其他级别:

logger.setLevel(Level.LogLevel); // 例 logger.setLevel(Level.FINE); 

此例中仅记录 FINE 及以上级别,其他消息丢弃。

记录消息使用 log() 方法:

logger.log(Level.LogLevel, "log message"); // 例 logger.log(Level.INFO, "This is INFO log level message"); 

各级别有简写方法:

logger.info("This is INFO log level message"); logger.warning("This is WARNING log level message"); 

所有通过设置级别的日志请求转发给 LogRecord。

注意: 若日志记录器级别为 null,其级别从父级继承,以此类推向上。


2. 过滤器

过滤器(若存在)决定 LogRecord 是否应转发。顾名思义,按特定标准过滤日志消息。

LogRecord 仅在通过指定标准时,从日志记录器传给处理器,再从处理器传给外部系统。

// 设置过滤器 logger.setFilter(filter); // 获取过滤器 Filter filter = logger.getFilter(); 

3. 处理器(Appenders)

日志处理器或追加器接收 LogRecord 并导出到各种目标。

Java SE 提供 5 个内置处理器:

处理器用途
StreamHandler写入 OutputStream
ConsoleHandler写入控制台
FileHandler写入文件
SocketHandler写入远程 TCP 端口
MemoryHandler写入内存

处理器可将 LogRecord 传给过滤器,再次决定是否转发到外部系统。

添加新处理器:

logger.addHandler(handler); // 例 Handler handler = new ConsoleHandler(); logger.addHandler(handler); 

移除处理器:

logger.removeHandler(handler); // 例 Handler handler = new ConsoleHandler(); logger.addHandler(handler); logger.removeHandler(handler); 

日志记录器可有多个处理器。获取所有处理器:

Handler[] handlers = logger.getHandlers(); 

4. 格式化器

处理器可使用 Formatter 在导出外部系统前将 LogRecord 格式化为字符串。

Java SE 有两个内置 Formatter:

格式化器用途
SimpleFormatter格式化 LogRecord 为字符串
XMLFormatter格式化 LogRecord 为 XML 形式

格式化处理器:

// 格式化为字符串 handler.setFormatter(new SimpleFormatter()); // 格式化为 XML handler.setFormatter(new XMLFormatter()); 

LogManager

LogManager 对象维护全局日志信息。它读取并维护日志配置和日志记录器实例。

日志管理器是单例,即仅实例化一个实例。

获取日志管理器实例:

LogManager manager = LogManager.getLogManager(); 

日志记录的优势

Java 日志记录的优势:

java

  1. Java日志最佳实践:三大核心原则构建可观测的可靠代码
  2. 精通 Java 运算符:类型、语法与实战示例
  3. Java 注释:类型、用法与最佳实践
  4. 精通 Java if…else:控制流全解析
  5. 精通 Java 增强 for 循环:语法、示例与最佳实践
  6. 精通 Java 字符串:创建、方法与最佳实践
  7. 精通 Java 接口:概念、实现与最佳实践
  8. 精通 Java 匿名内部类:定义、语法与实战示例
  9. 精通 Java Try-With-Resources:自动资源管理详解
  10. Java 注解详解:类型、放置位置与实战示例
  11. Java 断言实战指南:尽早发现 Bug 与保障代码可靠性
  12. 深入理解 Java Vector:用法、特性及与 ArrayList 的对比