【问题标题】:Spring AOP Logging with request ID带有请求 ID 的 Spring AOP 日志记录
【发布时间】:2015-11-22 13:11:30
【问题描述】:

我想实现基于 Spring AOP 的日志记录,它可以帮助我进行调试。我想跟踪 WebApplication 的每个请求进入和退出。单个请求中的每个方法都需要使用日志 ID 进行标记,以便我以后可以对其进行跟踪。我需要从它开始的组件和基本要求是什么。或者是否已经有一个基于它的库。

【问题讨论】:

  • 您使用的是哪个日志库?
  • @M.Deinum 它现在正在使用的 log4j。
  • Log4j 还是 log4j2?直接使用还是使用 SLF4J 之类的东西?
  • @M.Deinum 不...实际上应用程序有点旧,只使用 log4j。并且我打算重写它......所以选项是开放的。

标签: java spring logging


【解决方案1】:

IMO 代替 AOP 使用 HandlerInterceptor或者更简单的 HandlerInterceptorAdapter)。

如果使用Log4j 进行日志记录,最好使用NDC否则请查阅文档以了解所用日志框架的等效功能

拦截器的preHandle方法将包含向NDC填充请求ID的逻辑,该ID可以是UUID或任何其他唯一标识符,并应返回true以便继续执行。

拦截器的postHandle/afterCompletion方法应该清除NDC,否则后续请求可能包含较早的NDC内容。

日志拦截器如下所示

public class LoggingHandlerInterceptor extends HandlerInterceptorAdapter {

    public boolean preHandle(HttpServletRequest request,
                     HttpServletResponse response,
                     Object handler)
              throws Exception {
        NDC.push(UUID.randomUUID().toString().replaceAll("-", "").toUpperCase());
        return true;
    }

    public void postHandle(HttpServletRequest request,
                   HttpServletResponse response,
                   Object handler,
                   ModelAndView modelAndView)
            throws Exception {
        NDC.clear();
    }
}

如果需要任何问题/澄清,请在 cmets 中告知。

【讨论】:

    猜你喜欢
    • 2012-09-12
    • 2018-04-13
    • 2012-11-04
    • 2012-09-30
    • 1970-01-01
    • 1970-01-01
    • 2015-06-09
    • 2011-08-12
    • 2014-06-13
    相关资源
    最近更新 更多