论坛首页 Java企业应用论坛

J-Hi对系统日志的设计思想与设计原理

浏览 1634 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (17)
作者 正文
   发表时间:2011-03-30  
系统日志就是记录管理员或用户对系统的历史操作信息,比如管理员添加或者修改、删除一个角色,这些操作都可以记录到系统日志表中,管理员可以通过“系统管理—系统日志”菜单查询详细的日志信息。

系统日志的配置大致包括两个方面:系统日志缓存配置和系统日志类型配置,此两项配置信息在WEB-INF/config/appContext.xml中

²        系统日志缓存配置:

系统产生的日志默认不是立即存入数据库的,而是存入日志缓存中,缓存中的日志信息达到设定的缓存策略时,系统将缓存中的日志信息存入数据库,缓存策略配置目前支持按照缓存大小、时间、日志条数设置

在appContext.xml文件中找到如下配置

<bean id="cacheProcessor" class="org.hi.base.sysapp.interceptor.LogSizeCacheProcessor">

           <property name="size" value="10"/>

</bean>

此处是按照缓存大小设置的缓存策略,此处的缓存大小设置的值为10M

此行代码下方有两个类似的被注释的配置如下:

<!--

<bean id="cacheProcessor" class="org.hi.base.sysapp.interceptor.LogTimerCacheProcessor">

    <property name="period" value="1"/>

</bean>

<bean id="cacheProcessor" class="org.hi.base.sysapp.interceptor.LogLengthCacheProcessor">

    <property name="length" value="10"/>

</bean>

-->

此处两项配置也是缓存策略的设置,第一项配置是按照时间设置缓存策略,此处的时间值为1分钟,第二项配置是按照日志条数设置缓存策略,此处的日志条数值为10条

注意:以上三项配置只能保留一项,也就是说当系统运行时只能选择一种日志缓存策略

²        系统日志类型配置:

系统日志类型根据操作的不同大概分为四种:添加和更新操作、删除操作、查询操作、其他操作,此四种类型分别对应于WEB-INF/config/appContext.xml配置文件中的四项配置

添加和更新操作

<bean id="saveLogAnalysisor" class="org.hi.base.sysapp.interceptor.LogSaveAnalysisor"/>

删除操作

<bean id="removeLogAnalysisor" class="org.hi.base.sysapp.interceptor.LogRemoveAnalysisor"/>

查询操作

<bean id="searchLogAnalysisor" class="org.hi.base.sysapp.interceptor.LogSearchAnalysisor"/>

其他操作

<bean id="noknowLogAnalysisor" class="org.hi.base.sysapp.interceptor.LogNoknowAnalysisor"/>

系统运行时,管理员可以根据关注的日志类型选择其中的一项或者多项,选择好后将其配置到以下代码处:

<bean id="methodLogInterceptor" class="org.hi.base.sysapp.interceptor.MethodLogInterceptor">

           <property name="saveProcessor" ref="saveProcessor"/>

           <property name="cacheProcessor" ref="cacheProcessor"/>

           <property name="unincludeMethodNames">

               <value>getEnumerations</value>

           </property>

           <property name="analysisors">

               <list><!—- 此处配置日志类型 -->

                  <ref bean="saveLogAnalysisor"/>

                  <ref bean="removeLogAnalysisor"/>

                  <ref bean="noknowLogAnalysisor"/>

               </list>

           </property>

</bean>

管理员可以将关注的日志类型添加到<property name="analysisors">下的<list>标签下,上面的代码配置了三项日志类型,即添加和更新操作、删除操作、其他操作产生的日志将会被记录到数据库,不建议将查询操作日志类型添加进去,因为查询操作将会产生大量日志,不便于管理员找到自己关注的日志内容,另外也会在较短时间内占用大量的数据库空间。

设计分析:通过上面的配置文件可以看出,系统日志的设计思想通过Spring的方法拦截器(methodLogInterceptor),该拦截器又分大的三个部分,保存处理器(saveProcessor);缓存处理器(cacheProcessor);日志分析器(analysisors)。保存处理器,的工作是将日志保存到指定的持久化介质中例如数据库表或是XML等,目前平台缺省提供的是保存到数据库表中,当然您也可以通过实现接口的方式自由控制日志保存的位置;缓存处理器,日志不是每生产一条就做一次保存的,而是通过缓存批量将日志信息保存起来,缓存处理器就是来完成日志的缓存功能,目前平台提供3种缓存机制;日志分析器,因为数据的增删查改等操作的描述信息各不相同,所以日志分析器的作用是分析日志数据的描述格式以方面管理员阅读日志。对于日志的处理流程来看,当调用某个业务层方法时日志的方法拦截器就是拦截住该方法,首先通过方法的类型调用相应日志分析器分析出日志描述信息与格式,然后将日志放到缓存中,缓存处理器会根据相应的触发条件,如果满足条件就调用保存处理器将日志信息批量保存起来。

设计分析部分由J-HI创始人张昊补充,精髓啊,呵呵!!
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics