我想以最少的重构将日志系统添加到我们的spring MVC应用程序中。我想将每个请求的邮件分组,并在其中附加一些id
。我想到的一种方法是,在控制器中创建一个id
的记录器对象,并将其传递给服务DAO层。所有层都将消息添加到该记录器对象。最后,我在请求处理结束时打印它们。 Spring或log4j框架是否提供更好的方法来实现这一目标?
答案 0 :(得分:0)
Spring具有Request范围,因此您可以创建在接收到请求时生成的请求范围的ID对象。然后,您可以使用常规的依赖项注入将这个对象注入需要记录的类中,这样就不必传递任何内容。
@Bean
@Scope(value = WebApplicationContext.SCOPE_REQUEST, proxyMode = ScopedProxyMode.TARGET_CLASS)
public RequestId requestScopedBean() {
return new RequestId();
}
对于Log,通常的做法是按类初始化Log。然后,您将在每个课程中拥有所有想要的元素。
private static final Logger logger = Logger.getLogger(YourClass.java)
希望有帮助!
答案 1 :(得分:0)
Spring Security具有将SessionId自动添加到记录器的功能。 Check this One
在此处发布相同的答案:
RequestContextHolder.currentRequestAttributes().getSessionId();
这依赖于Spring的RequestContextHolder,因此它应该与Spring MVC的DispatcherServlet一起使用,或者应该声明一个RequestContextListener。如果不存在,还将创建会话。