Log4j 架构
Log4j 遵循分层架构,其中每一层用于提供不同的对象来执行不同的任务。这种分层架构使设计在未来可以轻松灵活地扩展。
Log4j 框架中有两种类型的对象可用:
核心对象:核心对象是框架的强制性对象。所有对象都需要使用框架。
支持对象:支持对象是框架的可选对象。它们曾经支持核心对象执行额外但重要的任务。
Log4J核心对象
有以下类型的核心对象或以下是 Log4J 组件:
Logger:
Logger 是提供 Logger 对象的顶层。Logger 对象负责获取日志信息,它们存储在命名空间层次结构中。
- Logger 是一个类,它在 org.apache.log4j.* 中可用
- 我们必须为每个 Java 类创建一个 Logger 对象
- Logger组件用于在我们的java类中启用log4j
- Logger方法用于在 java 类而不是 SOPLS 中生成日志语句。
- 为了获得一个 Logger 类的对象,我们需要调用一个静态工厂方法,该方法将一个对象作为返回类型
- 我们必须在我们的类名之后创建一个 Logger 对象。例如:
获取记录器对象:
static Logger log = Logger.getLogger(YourClassName.class.getName())
注意:当您创建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层提供了Layout 对象,用于格式化不同风格的日志信息。它用于在发布日志信息之前为 appender 对象提供支持。
Layout对象在以人类可读和可重用的方式发布日志信息方面发挥着重要作用。
Layout组件定义了日志语句由 appender 写入目标存储库的格式。
log4j 中有不同类型的布局类:
- SimpleLayout:用于以非常简单的方式格式化输出;它打印级别,然后是破折号“-”,然后是日志消息。
- PatternLayout:用于根据指定的转换模式格式化输出,如果未指定,则考虑默认转换模式。
- HTMLLayout:将输出格式化为 HTML 表格。
- XMLLayout
支持对象
log4j 框架中还有其他不同的对象,它们在日志记录框架中起着至关重要的作用:
级别对象:级别对象定义任何日志信息的优先级和粒度。API 中定义了七个级别的日志记录:OFF、DEBUG、INFO、ERROR、WARN、FATAL 和 ALL。
过滤器对象:该对象分析日志信息并就是否应该记录该信息做出额外的决定。
ObjectRenderer: ObjectRenderer 对象专门提供传递给日志框架的不同对象的字符串表示。Layout 对象使用此对象来准备最终的日志信息。
LogManager: LogManager 对象用于管理日志框架。它用于从系统范围的配置文件或配置类中读取初始配置参数。