正文
日志系统是框架设计的重要的一个环节,同时也是,监督以及查看我们设计框架是否存在异常、自己写的代码是否有bug的重要工具。今天,根据我的理解,设计一款属于自己的日志系统,应用于自己设计的框架中。
任何的需求都是源自现实问题的需要。我们今天设计的系统,主要的目的是,设计实现日志系统并可插拔式的实现日志系统。
看上面的图片,在我原来写的框架的基础上增加了日志系统模块,用来解决框架的日志系统与我们原来项目日志输出相互兼容问题。
显然,根据上面图片里面的设计,我设计了adaptor这个包,里面的含义是我们日志的输出的装饰类,可以根据自己的项目系统,任意的切换日志输出,例如:sl4j等日志工具。
在Logger这个接口的设计的过程中,我增加了一系列的日志输出的方法,根据等级进行了划分。
在第一个日志的实现类里面,实际上使用的是Java自己的输出方式输出到控制台,这个时候,日志输出的格式是可以控制的。
如果不想使用Java的日志输出,我们还是可以配置使用项目里面的输出工具,也即是DelegateLoggerImpl 实现,采用了组合设计方式,真正的实现是在我们设计的如下对象中:
这时候,疑问就出现了,我们不知道,这个对象是什么,如何有效的日志输出呢?
这个时候,l利用Java的反射了,但是,每一次利用反射的方式获取对象的方法,势必会降低系统的性能,我们可以在项目启动的时候,就保存已有的方法,这样就好啦。如下面的设计:
这样,我们的日志输出就简单啦!
但是,如何获取到上面的delegate呢?
这就是WebLogFactory的问题啦,我在设计这个工厂类的时候,采用了下面设计方式:
上面也是利用反射的方式,获取Logger对象。好至此,设计都完毕了,我们测试一下!
使用自定义注解,测试如下: