如何将用户名插入MDC以获取整个Web请求

时间:2011-07-19 19:22:08

标签: spring-mvc slf4j logback mdc

我正在尝试使用映射的诊断上下文将用户的用户名添加到所有相关的日志记录语句中。但是,我尝试了三种不同的方法使其工作没有成功:

  1. 登录后将用户名推送到MDC,注销后删除。这种方法最终混淆了哪个日志语句来自哪个用户。
  2. 使用ServletFilter在每个页面加载时将用户名推送到MDC,并在请求结束时将其弹回。这仅捕获一些数据,仅在Spring安全层中捕获。
  3. 在所有Controller方法前面使用AOP @Around拦截器没有效果。
  4. 有没有人对如何实现这一点有任何建议?

1 个答案:

答案 0 :(得分:3)

MDC有什么问题?你是什​​么意思 Spring安全层?我在一个Web应用程序中使用了这种方法并且运行良好。因为MDC绑定到线程,所以来自此线程的所有日志记录语句都将设置用户名,即服务和存储库层。

当然,如果某些用户使用线程(例如servlet 3.0异步处理,JMS侦听器,执行程序),则需要在池化线程中向MDC注入用户名的另一种方法。

另请参阅我的回答here