使用Spring AOP集中日志记录

时间:2012-10-10 00:48:41

标签: spring logging aop

我希望你们能够帮助我解决我目前面临的难题。我目前正在开发一个现有的Web应用程序项目,其中一个要求是我们必须集中日志记录。该应用程序是一个分层应用程序,由客户端层(即视图),服务层,业务层和DAO层组成。

目前,登录应用程序由控制器方法处理,其中每个控制器方法需要记录一些信息,通过调用日志记录功能手动记录数据。这些控制器方法处理的请求来自许多不同的客户端源,包括移动设备(如电话),Web浏览器,Web服务等。目前,需要记录的所有数据都被捕获到一个通用对象中,该对象被传递给用于将这些属性保存到数据库表的日志记录方法。

问题是这个通用对象正是一个通用对象。它用于许多其他任务,包括日志记录,搜索和许多其他任务。当这个通用对象用于日志记录时,除了几个属性之外,用于填充通用对象的大多数属性(在日志记录的情况下)都来自请求,即(一个HttpServletRequest对象) 。由于该对象的多功能性,该通用目标有可能被滥用。因此,我们想要摆脱这个通用目标并为专门任务创建专用对象。在日志记录的情况下,我们决定创建一个日志对象,我们将使用它来保存我们需要记录的数据。我们将使用Spring AOP效果记录

难题就是这个

1)我们是否应该使用控制器在我们想要记录的新专用日志记录对象上设置属性,然后使用AOP建议,一旦控制器方法执行完毕就检索日志对象的持久性

2)我们应该使用放置在请求对象中的属性(即HttpServletRequest对象)在AOP通知中设置新日志对象的属性吗?

选项1的问题在于控制器会发现日志记录,并且根据良好的设计原则,控制器只应将任务委派给业务和服务层来执行此类任务。选项1意味着控制器不仅仅是委派任务,即它将构建日志对象

我对选项2的问题是它将我的日志对象与请求对象(即HttpServletRequest对象)紧密耦合,因此我想知道这种方法是否有任何潜力。

欢迎提出任何建议,建议和批评。此外,如果有人不得不处理类似的情况,我想听听他们如何处理这个问题。

提前谢谢大家。

1 个答案:

答案 0 :(得分:0)

我将使用方面添加日志记录到服务层,表示为接口。

您可以使用HTTP过滤器或方面从控制器层进行记录。

您可以根据需要在多个图层中应用AOP。

相关问题