公司的系统里需要新增日志记录的功能。将每个用户的操作(主要是对数据的增删改)都要记录下来,以便以后查询。请问这个怎么做啊?从来没做过,用户修改数据时,肯定会要操作数据库的,但是怎么记录对数据库的这种操作呢?

解决方案 »

  1.   

    因为用户对记录的操作 涉及很详细的信息比如删除用户 删除新闻 删除栏目等。我们以前有个需求是 用户操作的栏目标题 ,新闻标题,等这些详细信息都要记录,后来就只有在action这一层做,写一个接口,调用接口来保存操作记录信息到DB中。当然,这样的方法只能说是完成了任务,但实现很拙劣。如果只是普通记录动作信息,你用AOP来应该可以实现.
      

  2.   

    AOP是可以实现,只是像一楼说的,AOP对于你的需求来说又有点不符
    还是关注下吧。期待高手。
      

  3.   

    如果你用spring的话最好使用AOP:
    1.使用after通知(Aspect After),切入service层的save,create,update,modify等方法,并且确保这些方法的第一个参数是实体bean:如 save(TbUser user);
    2.需要记日志的实体里都定义一个getLogInfo的方法,返回需要记录的基本信息;
    3.使用过滤起webfilter获得当前线程绑定的request(这个去搜);
    4.在after通知的实现里,通过request取的用户session,并获取user的当前信息如用户名,IP等;
    5.在after通知的实现里,通过JonnPoint获取切入的方法名及第一个参数,使用反射执行getLogInfo方法,连同用户名,时间戳,IP,方法名(可以转换成可理解的白话,save=保存,create=新增 )这些信息存入数据库表tb_log
      

  4.   

    补充一下,公司原来的系统是EJB做的。我要做的日志功能一定要用到框架吗?
      

  5.   

    EJB就不好搞了,麻烦点就写接口吧
      

  6.   

    楼上的说清楚点啊,我现在是一点思路都没有。上面几位说的,可惜我不懂Spring。现在学也来不及做项目。
      

  7.   

    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    在dao里定义一个变量
    private static final Log log = LogFactory.getLog(类名.class);在实现的方法体内
    log.debug("sql:" + sql);不知道我说的对不对
      

  8.   

    11楼说的  
    只是在console里看到的操作输出的自定义信息  
    数据库又没有存储操作日志信息
      

  9.   

    用spring的Aop吧,很好实现的,如果不想用spring框架的话,就去查查有关动态代理的资料,主要做的就是这种打边角的活!所谓的面向切面编程
      

  10.   

    不知道你项目中具体用到了哪些技术啊?
    1、SPRING AOP
    2、STRUTS 拦截器
    都不错啊!再提议,如果真的做的话,最好弄个缓存先,不要用户每操作一次都去执行保存DB的操作,那样对DB的压力会很大,特别是项目的并发访问大的时候,最好先将一批操作日志保存到缓存或内存中,等到了一定数量的时候执行批保存的操作。当然这种方法有可能在系统down掉的时候有部分日志无法保存。
      

  11.   

    我也要做操作日志 用的是SSH框架 有没有这方面操作日志的源码  你们说的 我听得都好模糊 求帮助。
      

  12.   

    我的QQ1009610689 求 加QQ 详解!谢谢啦!