JDK日志框架

 

1.      初衷:日志记录对于软件的维护,特别是对于已经部署到运行环境之后的软件调试有着重要的意义.

2.       背景:java 1.4开始,JDK包括了一个崭新的日志框架包 java.util.logging.

        复杂的日志功能,JDK框架具有足够的可扩展能力,可以定义不同需求的日志处理,消息格式化,日志消息级别等组件

 

3.       日志系统诞生前的遐想:(心目中的日志系统应该做的事情)

1.记录日志的对象:负责记录日志的信息,可以输出到不同的位置:控制台,文件甚至网络。

2.信息的格式:输出文本,xml,HTML格式

3.日志信息的级别分类:过滤冗余信息,保留关键日志.

4.日志对象必须是可配置的:配置输出到指定的目标,输出格式和决定何种级别以上的日志才能输出。配置的形式:1.代码的形式

                          2.配置文件的形式:对于已经部署到运行环境中的软件而言,可以非常方便的改变日志配置而无需改变其源代码.

 

4.       JDK对日志系统遐想条件的一一对应实现

1.       Logger:日志记录对象,用于记录日志信息

2.       Handler:用于处理日志信息的输出,在Handler类中,可以决定日志是输出到文件还是控制台。

3.       Filter:用于过滤日志,在filter类中可以根据日志级别或者某种条件来来决定是否输出该日志信息,这样达到去除冗余信息的目的.

4.       Formatter:用于格式化日志信息,给类可以将日志文本格式化为XML或HTML格式,这完全依赖于具体的实现。

5.       Level:用于表示日志的级别,JDK框架默认级别有:SERVER,WARNING,INFO,CONFIG,FINE,FINER,FINEST.

 

5.JDK日志框架的工作流程(各个组件的协同关系)

 

Logger对象首先判断日志级别是否满足输出级别的要求,满足要求的消息交给所配置的Handler对象。

如果日志对象配置了一个Filter对象,那么Filter对象会对日志信息做一次过滤。

Handler对象接受到日志消息后,根据所配置的格式化类Formatter改变输出格式,根据所配置的Filter对象和level对象再次过滤日志信息,最后输出到该Handler对象指定的输出位置,可以是控制台,文件,网络socket甚至是内存缓存区

 

其结构模型如下: 

 

Application----------------------> Logger------------------------->Hanlder---------------------------------------------------------->outside
                                                         |                                                 |
                                                         |                                                 |
                                                         |                                                 |
                                                     Filter                                          Filter,Formatter

 JDK支持的Handler类:

 ConsoleHandler:输出日志到控制台

 FilerHandler:     输出日志到指定的文件中

 MemoryHandler:  输出日志到内存缓存区中,当一定的条件满足的时候(如某种关键字的日志信息)再将缓存区的日志输出。

 SocketHandler:   输出日志到网络Socket中.

 StreamHandler:   输出日志到输入输出流对象中.