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: 输出日志到输入输出流对象中.