公司的系统里需要新增日志记录的功能。将每个用户的操作(主要是对数据的增删改)都要记录下来,以便以后查询。请问这个怎么做啊?从来没做过,用户修改数据时,肯定会要操作数据库的,但是怎么记录对数据库的这种操作呢?
解决方案 »
- 验证问题
- 关于Java.net.BindException,如何释放被占用的端口
- 谁能给我一个最简单的mysql触发器,另外在jsp中怎么调用?
- 在struts中使用tiles时,给不同的网页命名的问题!
- jxl生成文件下载不成功,cpu占用100%,郁闷!
- 大家帮我看看连接池是这样配的吗???急
- spring3.2.2+struts2.3.14 报错
- 急:我用JB9编译smartUpload时提示javax.servlet不存在等错误,为什么?
- 虚心请教图片显示问题!
- 关于Jsp+javabean操作数据库的一点疑问
- Android发送短信与邮件
- 登录信息保存到SESSION后显示在首页的问题
还是关注下吧。期待高手。
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
import org.apache.commons.logging.LogFactory;
在dao里定义一个变量
private static final Log log = LogFactory.getLog(类名.class);在实现的方法体内
log.debug("sql:" + sql);不知道我说的对不对
只是在console里看到的操作输出的自定义信息
数据库又没有存储操作日志信息
1、SPRING AOP
2、STRUTS 拦截器
都不错啊!再提议,如果真的做的话,最好弄个缓存先,不要用户每操作一次都去执行保存DB的操作,那样对DB的压力会很大,特别是项目的并发访问大的时候,最好先将一批操作日志保存到缓存或内存中,等到了一定数量的时候执行批保存的操作。当然这种方法有可能在系统down掉的时候有部分日志无法保存。