Log4j 架构

17 Mar 2025 | 4 分钟阅读

Log4j 遵循分层架构,其中每一层用于提供不同的对象来执行不同的任务。这种分层架构使设计易于扩展并在未来更灵活。

log4j 框架中有两种类型的对象

核心对象: 核心对象是框架的强制对象。 使用该框架需要所有对象。

支持对象: 支持对象是框架的可选对象。 它们用于支持核心对象以执行其他但重要的任务。

核心对象

以下是核心对象的类型,或者是以下log4J组件

Logger(记录器)

Logger 是顶层,提供 Logger 对象。 Logger 对象负责获取日志记录信息,它们存储在命名空间层次结构中。

  • Logger 是一个类,位于 org.apache.log4j.* 中
  • 我们必须为每个 java 类创建一个 Logger 对象
  • Logger 组件用于在我们的 java 类中启用 log4j
  • Logger 方法用于在 java 类中生成日志语句,而不是 SOPLS。
  • 为了获取 Logger 类的对象,我们需要调用一个静态工厂方法,它将返回一个对象作为返回类型
  • 我们必须在类名之后立即创建一个 Logger 对象。 例如

获取 logger 对象

注意: 当您创建 logger 对象时,我们需要传递完全限定的类名或类对象作为参数,其中 class 表示我们将要使用 log4j 的当前类。

Logger 对象有一些方法; 这些方法用于打印应用程序的状态

这些方法是

  • debug()
  • info()
  • warn()
  • error()
  • fatal()

所有这些方法都大致相同。 这些方法的优先级顺序是:debug < info < warn < error < fatal。

Appender(追加器)

Appender 是较低层组件,提供 Appender 对象。 Appender 对象负责将日志记录信息发布到各种首选目标,例如文件、数据库、控制台、Unix Syslog 等。

  • Logger 类用于生成不同级别的语句,Appender 获取这些日志并将其存储在某些数据库或文件中。
  • Appender 不是一个类; 它是一个接口。

在 log4j 中,我们有不同的 Appender 实现类

FileAppender: 用于将日志事件追加到文件。 它支持另外两个 appender 类

  • RollingFileAppender:扩展 FileAppender 类,以便在日志文件达到一定大小时备份它们。
  • DailyRollingFileAppender:扩展 FileAppender 类,以便以用户选择的频率滚动底层文件。

ConsoleAppender: 使用用户指定的布局将日志事件追加到 System.err 或 System.out。 默认控制台是 System.out。

JDBCAppender: 用于数据库。

SMTPAppender: 用于在发生特定日志记录事件(通常是错误或致命错误)时发送电子邮件。

SocketAppender: 用于远程存储。

SyslogAppender: 将消息发送到远程 Syslog 域。

TelnetAppender: 专门写入只读套接字。

WriterAppender: 用于根据用户的选择将日志事件追加到 Writer 或 OutputStream。

布局

Layout 层提供 Layout 对象,用于以不同的样式格式化日志记录信息。 它用于在发布日志记录信息之前为 appender 对象提供支持。

Layout 对象在以某种方式发布日志记录信息方面发挥着重要作用,即人类可读且可重用。

Layout 组件定义了 appender 将日志语句写入目标存储库的格式。

log4j 中有不同类型的布局类

  • SimpleLayout:它用于以非常简单的方式格式化输出; 它打印 Level,然后是短划线“-”,然后是日志消息。
  • PatternLayout:用于根据指定的转换模式格式化输出,或者如果未指定转换模式,则采用默认转换模式。
  • HTMLLayout:它将输出格式化为 HTML 表格。
  • XMLLayout
Log4j Architecture

支持对象

log4j 框架中还有其他不同的对象,在日志记录框架中发挥着重要作用

Level 对象: Level 对象定义任何日志记录信息的优先级和粒度。 API 中定义了七个日志记录级别:OFF、DEBUG、INFO、ERROR、WARN、FATAL 和 ALL。

Filter 对象: 此对象分析日志记录信息,并就该信息是否应记录做出额外的决定。

ObjectRenderer: ObjectRenderer 对象专门用于提供传递给日志记录框架的不同对象的 String 表示形式。 Layout 对象使用此对象来准备最终的日志记录信息。

LogManager: LogManager 对象用于管理日志记录框架。 它用于从系统范围的配置文件或配置类中读取初始配置参数。


下一个主题Log4j 示例