1

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

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

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

难题是这个

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

或者

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

我对选项 1 的问题是控制器意识到日志记录,并且根据良好的设计原则,控制器只应该将任务委托给业务和服务层以执行此类任务。选项 1 意味着控制器所做的不仅仅是委派任务,即它将构建日志对象

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

欢迎任何形式的建议、建议和批评。另外,如果有人不得不处理类似的情况,我想听听他们是如何解决这个问题的。

谢谢大家。

4

1 回答 1

0

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

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

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

于 2012-10-10T00:52:33.853 回答