讨论,SSH架构中,如何记录操作日志?

Little_qd 2009-02-14 11:00:01
这里的操作日志指业务层面的日志,比如一个产品的新建、修改、删除、审核、发布等作为一个操作进行记录
问题:
1、前提,有没有必要记?记些什么?
时间、操作员、业务数据ID、操作、IP、结果...
2、谈谈你的应用中日志系统如何规划的?
3、粒度问题,比如一个操作对应N个数据操作,记一条 or N条?
4、SSH中采用何种方式进行记录?
a.DB trigger------业务无关
b.应用中硬编码-----比较丑陋
c.Spring拦截-------数据无关
d.Hibernate Event-粒度问题

畅所欲言,thx
...全文
2560 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
xfhuaguang 2009-03-04
  • 打赏
  • 举报
回复
恩,我也在做这个方面的
关注
Little_qd 2009-02-20
  • 打赏
  • 举报
回复
最近通过Hibernate Event实现了字段级的日志记录
只是Hibernate POJO缺少业务含义
Hibernate监听到对POJO的event无法确定是那个业务模块触发的
虽然通过给POJO指定annotation可以部分实现
Little_qd 2009-02-20
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zhangjihao 的回复:]
在SSH环境下,如果将数据库操作事务交给Spring管理,那么记录操作日志就容易了:
1、尽量使用注解声明事务;
2、写一个类扫描使用了事务的方法。根据楼主提出的技术需求分析,只有写入动作才需要记录,同样数据库只有写入才需要事务,读取不需要,所以在不需要事务的方法上面标注@Transactional(propagation=Propagation.NOT_SUPPORTED,readOnly=true),这样可以精确过滤出需要记录日志的方法;
3、利用AOP编程实现日志记录…
[/Quote]

继续
tzb08 2009-02-17
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zhangjihao 的回复:]
在SSH环境下,如果将数据库操作事务交给Spring管理,那么记录操作日志就容易了:
1、尽量使用注解声明事务;
2、写一个类扫描使用了事务的方法。根据楼主提出的技术需求分析,只有写入动作才需要记录,同样数据库只有写入才需要事务,读取不需要,所以在不需要事务的方法上面标注@Transactional(propagation=Propagation.NOT_SUPPORTED,readOnly=true),这样可以精确过滤出需要记录日志的方法;
3、利用AOP编程实现日志记录功…
[/Quote]

嗯 顶
howsun_zh 2009-02-16
  • 打赏
  • 举报
回复
在SSH环境下,如果将数据库操作事务交给Spring管理,那么记录操作日志就容易了:
1、尽量使用注解声明事务;
2、写一个类扫描使用了事务的方法。根据楼主提出的技术需求分析,只有写入动作才需要记录,同样数据库只有写入才需要事务,读取不需要,所以在不需要事务的方法上面标注@Transactional(propagation=Propagation.NOT_SUPPORTED,readOnly=true),这样可以精确过滤出需要记录日志的方法;
3、利用AOP编程实现日志记录功能。

时间:AOP切入点处取系统时间
操作员和IP:控制层在session作用域里取得用户对象和request取IP地址传给切入点
操作:可以在操作数据库的DAO组件上(方法)用自定义注解标上,例如:@Operation=INSERT|DELETE|UPDATE...只要读取到这个配置就知道操作类型。当然也可以利用Hibernate来得知,得要看Hibernate的源代码。
结果:事务成功即成功,事务回滚即失败。
业务数据ID:这个有两种解决方法,一种笨拙的办法是所有的数据模型层的实体对象都抽取ID到父类;二是实体映射的配置方法采用注解方式,这样可以写一个类扫描出实体的ID字段和类型,自然能记录之。

粒度问题:首先只要应用到事务的地方都可以记录之,批量操作数据行实际是循环调用DAO组件,也就实现了批量记录。当然,如果送批量SQL语句到数据库,由DBMS来做那就无奈了。

这种方案设计可以一次编写,终身使用,不受项目的模块增减影响。代码量小,维护容易。
Little_qd 2009-02-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 believefym 的回复:]
要记录业务层面的日志的话,直接在business层的代码里添加相应的日志操作代码不行吗?
既然是业务层的,没有必要对多个数据库进行多条记录吧?


关注一下。。。
[/Quote]

因为是对旧系统改造升级,业务层硬编码工作量太大也不易维护
同时需要记录数据的变化情况,比如某字段变化的前后值

下面请继续
believefym 2009-02-16
  • 打赏
  • 举报
回复
要记录业务层面的日志的话,直接在business层的代码里添加相应的日志操作代码不行吗?
既然是业务层的,没有必要对多个数据库进行多条记录吧?



关注一下。。。
guobaiya 2009-02-16
  • 打赏
  • 举报
回复
我们都是用L0G4J 的 可以记录很清楚
paperyt1 2009-02-14
  • 打赏
  • 举报
回复
log4j 就跟在Hibernate加入log4j的道理是差不多的
East271536394 2009-02-14
  • 打赏
  • 举报
回复
如果说log4j不行的话.哪就自己写一个,
呵,如果技术比较强的.

eagle_2008 2009-02-14
  • 打赏
  • 举报
回复
用log4j吧 应该是个比较好的选择

67,549

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧