我想用最少的重构将日志系统添加到spring MVC应用程序中。我想对每个请求的消息进行分组,并附加一些id
。我想到的一种方法是,在控制器中创建一些带有id
的记录器对象,并将其传递给服务DAO层。所有的层都在不断地向该记录器对象添加消息。最后,在请求处理结束时打印它们。Spring或log4j框架是否提供了更好的方法来实现这一点?
发布于 2018-10-16 08:22:19
Spring有一个请求作用域,因此您可以创建一个在接收请求时生成的请求作用域ID对象。然后,您可以将此对象注入到需要使用常规依赖注入进行日志记录的类中,这样您就不必传递任何东西了。
@Bean
@Scope(value = WebApplicationContext.SCOPE_REQUEST, proxyMode = ScopedProxyMode.TARGET_CLASS)
public RequestId requestScopedBean() {
return new RequestId();
}
至于日志,通常的做法是为每个类初始化一个日志。然后你就可以在每个类中拥有你想要的所有元素了。
private static final Logger logger = Logger.getLogger(YourClass.java)
希望它能帮上忙!
发布于 2018-10-16 12:09:52
Spring Security有一个特性可以自动将SessionId添加到记录器中。Check this One
在这里发布相同的答案:
RequestContextHolder.currentRequestAttributes().getSessionId();
这依赖于Spring的RequestContextHolder,所以它应该与Spring MVC的DispatcherServlet一起使用,或者您应该声明一个RequestContextListener。如果不存在,也将创建会话。
https://stackoverflow.com/questions/52826082
复制相似问题