张昊

J-Hi(http://www.j-hi.net)

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  45 Posts :: 1 Stories :: 110 Comments :: 0 Trackbacks

系统日志就是记录管理员或用户对系统的历史操作信息,比如管理员添加或者修改、删除一个角色,这些操作都可以记录到系统日志表中,管理员可以通过“系统管理系统日志”菜单查询详细的日志信息。

系统日志的配置大致包括两个方面:系统日志缓存配置和系统日志类型配置,此两项配置信息在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爱好者"刀刀"提供,他的QQ号为150380807,欢迎大家与他在技术上多多交流

posted on 2011-03-30 20:51 张昊 阅读(1870) 评论(2)  编辑  收藏

Feedback

# re: J-Hi对系统日志的设计思想与设计原理 2011-04-11 10:41 darkbluefeeling
拦截器做日志看起来很美,但实际使用中会遇到很多问题吧?

我们以前拿spring的auto-proxy做过类似的,非常之难以控制,入侵性太大。我觉得再山寨一个springside的起步框架,不如做通用服务使用范围更广。

比如日志:可以提供一个API,当某个项目需要使用日志时,引入jar包,配置服务,然后直接调用,不用管日志写到了那儿。api将日志通过网络写到一个通用平台系统中。如果需要查询日志,则到一个这个平台,统一查看和管理。以后,包括日志的自动归档,升级,日志统计与分析等等,都不需要每个项目配置一堆东西了。这种方式,不用提供基础代码让项目改(如果项目多了就容易乱),而是直接让他减少掉一个模块。以后维护,升级等等都更方便。

比如这样:http://www.guzzservices.com/category/developer-guide/

  回复  更多评论
  

# re: J-Hi对系统日志的设计思想与设计原理 2011-04-11 12:32 张昊
@darkbluefeeling
我不知道您对J-Hi了解多少,不过有一点可以肯定,J-Hi不是springside,在整体设计上也没有参考springside。  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: