3 Log4j架构

log4j架构

Log4j采用分层架构

Log4j API采用分层架构,每一层有不同的对象,完成不同的任务。这种分层架构让设计变得灵活,且易于日后扩展。

Log4j框架组件图

下图展示了Log4j框架中的组件:
图片

Log4j对象分类

Log4j里有两种类型的对象:

  • 核心对象:这是框架必需的对象,使用框架时必需用到它们。
  • 支持对象:这是框架的可选对象,它们支持核心对象做一些额外的,但并不重要的任务。

核心对象

核心对象包括如下几种类型:

Logger对象

最上一层是Logger对象,该对象负责获取日志信息,并存储于一个分层的命名空间之中。

Layout对象

Layout层提供了用于以各种风格格式化日志信息的对象,在发布日志信息之前,它为appender对象提供支持。
Layout对象对于发布日志信息非常重要,它使日志变得可读、可复用。

Appender对象

该对象位于分层架构中的较低一层,Appender对象负责将日志信息发布到不同目的地,比如:

  • 数据库、
  • 文件、
  • 控制台、
  • Unix Syslog等。

支持对象

Log4j 中还有其他一些对象,同样在框架中发挥着重要作用。

Level对象

Level对象定义了日志信息的粒度和优先级。API定义了七种级别:

序号 级别 描述
8 OFF 最高级别,用于关闭日志。
7 FATAL 指明非常严重的错误事件,可能会导致应用终止执行。
6 ERROR 指明错误事件,但应用可能还能继续运行。
5 WARN 指明潜在的有害状况。
4 INFO 指明描述信息,从粗粒度上描述了应用运行过程。
3 DEBUG 指明细致的事件信息,对调试应用最有用。
2 TRACE DEBUG级别的粒度更细。
1 ALL 所有级别,包括定制级别。

Filter对象

Filter对象用来分析日志信息,进而决定该条日志是否被记录。

一个Appender对象可对应多个Filter对象,当日志信息传给Appender对象时,与其关联的所有Filter对象需要判断是否将日志信息发布到目的地。

ObjectRenderer对象

ObjectRenderer对象负责为传入日志框架的不同对象提供字符串形式的表示,Layout对象使用该对象来准备最终的日志信息。

LogManager对象

LogManager对象管理日志框架,它负责从系统级的配置文件或类中读取初始配置参数。