在MVC应用中将日志消息分组的最佳方法是什么

时间:2018-10-15 23:37:24

标签: java spring logging log4j

我想以最少的重构将日志系统添加到我们的spring MVC应用程序中。我想将每个请求的邮件分组,并在其中附加一些id。我想到的一种方法是,在控制器中创建一个id的记录器对象,并将其传递给服务DAO层。所有层都将消息添加到该记录器对象。最后,我在请求处理结束时打印它们。 Spring或log4j框架是否提供更好的方法来实现这一目标?

2 个答案:

答案 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。如果不存在,还将创建会话。