关于springMVC日志管理如何实现自动化日志管理

飘落的灿烂 2013-10-10 01:26:35
系统用的spring3MVC+hibernate,后台的目录结构为controller-service-dao,并用拦截器intercepter拦截,事务配置在controller层,目前的日志管理用的是log4j,分别把日志输出到console,file,database,目前输出日志到console和file的内容已经达到需求要求,但是输出到数据库的日志达不到需求,需求要记录业务日志,要把业务同时输出到数据库,但是感觉log4j只能把一些日志信息输出到数据库,比如日志的创建时间,线程名称,日志级别,所属类,消息等等。

1.请问是否可以有办法用log4j将业务日志记录到数据库?
比如,我新增了一条记录,我把新增的这个model输出到数据库,我修改了一条记录,我把修改前的model和修改后的model放入数据库。。。

2.如果log4j没有办法实现上述功能,那我想就只能在业务中手动将业务日志写入数据库,但是请问我如何能将业务日志的功能实现在框架中,做到完全透明化,完全自动化?
就是比如开发人员开发一个模块时,他不用写任何关于输出日志的语句,框架自动会将他这个模块的业务日志记录到数据库。

3.请各位集思广益,是否可以将日志做到完全自动化,如果做不到,那半自动化又是如何做的?
比如开发人员在一个方法里只写一行日志的代码即可。

4.请求各位的帮助,最好附代码例子可以说明,同样还有关于异常的管理,这2者我想是否可以在拦截器里做这件事?
...全文
3291 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jerry_liu20080504 2014-09-17
  • 打赏
  • 举报
回复
学了两周之后,发现用spring aop貌似能够部分解决你说的问题。但是如果想要“自动化”,应该是不行。
Jerry_liu20080504 2014-08-06
  • 打赏
  • 举报
回复
解决了吗?楼主
飘落的灿烂 2013-10-10
  • 打赏
  • 举报
回复
引用 11 楼 wdf0324 的回复:
我现在在尝试,所有的方法命名统一前缀,比如:save***,update***,delete***,find***,前缀匹配上就拦截,然后,通过request获取参数,正在测试中,希望,可以一起沟通交流,一起研究
你的这个解决办法我也想过,但是我觉得增删改查的局限性太小了。我怕有业务不属于这些操作。我的qq271882889,请加
飘落的灿烂 2013-10-10
  • 打赏
  • 举报
回复
引用 10 楼 abstruct 的回复:
对于业务日志来说,可以使用log4j记录下日志,或者可以使用注解自定义注解的方式来记录每个action的业务。然后通过反射的方式获取相应的信息并记录。对于数据操作日志那么可以使用aop或者自己写代理类的方式来对数据的操作作记录
能否提供一个解决思路?对于您说的“或者可以使用注解自定义注解的方式来记录每个action的业务。然后通过反射的方式获取相应的信息并记录。”,想不到更好的方法
wdf0324 2013-10-10
  • 打赏
  • 举报
回复
我现在在尝试,所有的方法命名统一前缀,比如:save***,update***,delete***,find***,前缀匹配上就拦截,然后,通过request获取参数,正在测试中,希望,可以一起沟通交流,一起研究
安特矮油 2013-10-10
  • 打赏
  • 举报
回复
对于业务日志来说,可以使用log4j记录下日志,或者可以使用注解自定义注解的方式来记录每个action的业务。然后通过反射的方式获取相应的信息并记录。对于数据操作日志那么可以使用aop或者自己写代理类的方式来对数据的操作作记录
飘落的灿烂 2013-10-10
  • 打赏
  • 举报
回复
引用 5 楼 abstruct 的回复:
针对你的要求,你需要在数据库日志中写入数据实体对象,那么控制层你如何得到你的数据模型呢?这个不太现实,你至少也是要在service这一层来做吧。但是如果放到service来处理,那么可能在你的service里面还有对传入的对象做处理的逻辑呢,这种如何处理?这些都是问题。所以你应该根据你的需要把日志进行分类。一种是业务日志,记录操作了那些业务。一种是操作日志,操作了那些数据。这样可能会更好
你的这种办法也可以采用,但是如何才能做到完全自动化?
飘落的灿烂 2013-10-10
  • 打赏
  • 举报
回复
引用 7 楼 wdf0324 的回复:
目前,我也在研究这块,我觉得,放在control、service和dao都可以,其实,只有2点,一是拦截器还是过滤器,亦或网上有人说用spring secrity配置,二是,拿到需要操作的业务对象或参数,进行数据持久化记录日志
现在就卡在你说的这个第二点上了,二是,拿到需要操作的业务对象或参数
wdf0324 2013-10-10
  • 打赏
  • 举报
回复
目前,我也在研究这块,我觉得,放在control、service和dao都可以,其实,只有2点,一是拦截器还是过滤器,亦或网上有人说用spring secrity配置,二是,拿到需要操作的业务对象或参数,进行数据持久化记录日志
tony4geek 2013-10-10
  • 打赏
  • 举报
回复
那么你需要自己写些代码处理业务。
安特矮油 2013-10-10
  • 打赏
  • 举报
回复
针对你的要求,你需要在数据库日志中写入数据实体对象,那么控制层你如何得到你的数据模型呢?这个不太现实,你至少也是要在service这一层来做吧。但是如果放到service来处理,那么可能在你的service里面还有对传入的对象做处理的逻辑呢,这种如何处理?这些都是问题。所以你应该根据你的需要把日志进行分类。一种是业务日志,记录操作了那些业务。一种是操作日志,操作了那些数据。这样可能会更好
飘落的灿烂 2013-10-10
  • 打赏
  • 举报
回复
引用 2 楼 abstruct 的回复:
可能需要你对dao层做一个aop或者通过自己对dao写个代理来处理,对insert和update方法调用之前传入的实体bean和执行之后返回的实体bean写入日志。
这个办法我知道,但是我希望日志在controller层控制,因为不是所有的业务都要交互数据库,我想要记业务日志,而不是偏向于操作日志。
飘落的灿烂 2013-10-10
  • 打赏
  • 举报
回复
引用 1 楼 defonds 的回复:
关于服务器项目日志的一个便捷处理
我看了您这篇文章,请问这么做如果换中间件后如何解决?还有这篇文章只是将log4j配置在tomcat下,并没有任何关于业务的内容
安特矮油 2013-10-10
  • 打赏
  • 举报
回复
可能需要你对dao层做一个aop或者通过自己对dao写个代理来处理,对insert和update方法调用之前传入的实体bean和执行之后返回的实体bean写入日志。

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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