如何记录系统(oa)的操作日志 ?

9/6/2015来源:Java教程人气:3948

如何记录系统(oa)的操作日志 ?

  并不是把项目运行日志打印的文件或者控制台,而是需要把 谁,什么时候,操作了什么.操作的内容是什么,显示出来给使用oa的人员查阅.

  例如:更新了一个客户的名字.就需要记录为 谁,什么时候,修改了 客户,客户原名字,客户的新名字 记录下来.

  设计思路有:

  1.在action 层使用sPRing aop.

  好处是一个action 层的方法,即使包含了多个service 层的方法(操作),也会被看着是一个操作来记录.

  问题是:action 层从jsp 传过来的参数是HttpServeletRequest 类型,根本不知道传过来的参数 到底是什么.

  2.在service 层使用spring aop.

  好处是可以获取到具体的参数.

  问题是:假如多个多个service 层方法组成一个action 层的方法,日志将会记录多个操作,过于复杂,普通操作人员看不懂.

  3.直接在action层手写.不使用spring aop

  将日志记录到数据库.好处是可以将日志写的非常具体.

  问题是: 每个方法都写,太累!

  

  最后使用方法2.

  因为只对增加,删除,修改做日志,这样action 层一个方法都只有一个需要事务的方法(增删改),所以是一对一,没什么问题,可以写的比较清晰.

  实现的技术有 :在实体类添加自定义注解+spring aop +实体类添加getNameForLog() 方法.

  getNameForLog() 方法会返回一个对象唯一的标识,如名字,如Id.通过这个方法可以在aop 中获取方法的参数对象的唯一名字.这个名字就是日志中的"操作的内容是什么"的内容,可以让一般人看的懂是操作了什么对象.

  有一个问题是:不知道在aop 中获取参数更新前的数据.因为update(obj) 中的obj 已经是提交用于更新的.

  在此也请教一下有没有其他更好的方法实现这种日志记录呢?谢谢!