Spring mvc 如何为整个web请求将用户名插入MDC

Spring mvc 如何为整个web请求将用户名插入MDC,spring-mvc,slf4j,logback,mdc,Spring Mvc,Slf4j,Logback,Mdc,我正在尝试使用映射的诊断上下文将发出页面请求的用户的用户名添加到所有相关的日志记录语句中。然而,我尝试了三种不同的方法,但都没有成功: 登录后将用户名推入MDC,注销后将其删除。此方法最终会混淆哪个日志记录语句来自哪个用户 在每次页面加载时使用ServletFilter将用户名推入MDC,并在请求结束时将其弹出。这仅捕获部分数据,并且仅在Spring安全层中捕获 在所有控制器方法前面使用AOP@Around拦截器是行不通的 有人对如何做到这一点有什么建议吗?MDC有什么问题?您所说的Spring

我正在尝试使用映射的诊断上下文将发出页面请求的用户的用户名添加到所有相关的日志记录语句中。然而,我尝试了三种不同的方法,但都没有成功:

  • 登录后将用户名推入MDC,注销后将其删除。此方法最终会混淆哪个日志记录语句来自哪个用户
  • 在每次页面加载时使用ServletFilter将用户名推入MDC,并在请求结束时将其弹出。这仅捕获部分数据,并且仅在Spring安全层中捕获
  • 在所有控制器方法前面使用AOP@Around拦截器是行不通的

  • 有人对如何做到这一点有什么建议吗?

    MDC有什么问题?您所说的Spring安全层是什么意思?我在一个web应用程序中使用了这种方法,效果很好。因为MDC绑定到线程,所以来自该线程的所有日志记录语句都将设置用户名,即服务和存储库层

    当然,如果通过使用线程(例如servlet 3.0异步处理、JMS侦听器、执行器)为某些用户提供服务,则需要在池线程中将用户名注入MDC的另一种方法

    另请参见我的答案。

    您能否详细说明“您需要在池线程中将用户名注入MDC的另一种方法。”