【问题标题】:Logging and Spring Rest MVC app日志记录和 Spring Rest MVC 应用程序
【发布时间】:2017-10-28 05:28:32
【问题描述】:
我有一个 spring rest 应用程序,前面有 spring rest 控制器,中间有 spring 服务,服务后面有 spring jpa 存储库。其余控制器只是将请求委托给服务层。现在,问题是,我可以在服务层或控制器层中记录任何问题或信息消息,或者我可以保持它们两者的清洁并使用 aop 方法来捕获数据并将其记录到日志文件中。
我无法决定什么是最好的方法,以及为什么。如果你有任何建议,请给我一些建议。谢谢。
【问题讨论】:
标签:
java
spring
rest
logging
spring-data-jpa
【解决方案1】:
解决这个问题的常用方法是在每一层都有一个 Logger 类的实例。
例如:
public class EmployeeService {
private Logger logger = LoggerFactory.getLogger(EmployeeService.class);
}
public class EmployeeController {
private Logger logger = LoggerFactory.getLogger(EmployeeController.class);
}
- 代码更加简洁
- 您可以在类方法中记录日志,但知道 AOP 方法不允许这样做。
【解决方案2】:
使用 AOP 方法,您必须知道将创建新的额外类,并使用额外的逻辑为您的类提供日志记录功能。而正是这个新的类(代理)将被用来代替你的。这种方法存在一些问题,例如,当一个注释写入日志的方法调用另一个也以类似方式注释的方法时 - 在这种情况下,第二种方法不会写入日志。
根据性能,这两种方法非常相似,只是在内存中使用 AOP 的类更多。
另外,使用 AOP 你可以在方法调用之前或之后做一个日志,但是如果你需要在方法内部记录一些东西呢?
我建议使用简单的方法并在类中声明记录器。在这种情况下,您的代码将更易于理解,并且您将拥有更好的灵活性。
【解决方案3】:
每个类都有用户自己的记录器对象是一个很好的方法,首先你肯定知道日志是在哪里初始化的,其次你可以灵活地配置日志的过程。