原文:https://www.cnblogs.com/mr-yang-localhost/p/10348345.html

 

目录

开发中常常会打印业务日志,这些日志在排查问题或跟踪调用流程时非常有用,很多业务日志并没有考虑排查问题时的便利性,看似都记录了日志,一旦出现了线上问题,排查起来特别麻烦,很多时候又不方便让用户重现问题,造成解决问题周期长甚至是无法解决问题;如果日志记录的好,可以根据关键字搜索得出一条调用链日志,顺着这个日志链条就可以看出程序的执行全过程了。


2、如何记录日志

当然,应用、环境、ip、日志时间、日志级别、线程、输入输出参数…这些都是必要便于排错的日志信息就不多说了,重点说下如何记录跟踪一次调用流程的日志记录方法。

一种方法是:打印日志时候指明业务线,比如支付的流程里,所有步骤业务日志统一前缀 "支付流程:userId:",那么排查问题时候就可以根据关键字和userId来快速得到某个userid在支付流程里的所有轨迹。

但是这种方法有如下问题:

1、所有log统一前缀实行起来不太容易

2、同一个userid的log可能会非常多,并不能按request来归类

3、如果涉及到了公共方法调用(同时被多个业务流程调用),统一前缀很难实施

……

另一种方法是给每个request生成唯一的标识,给打印log的地方埋点这个标识,根据这个标识可以自动形成log链路。

 

自己埋点方式

 

使用filter(filter使用传送门)给每个request生成唯一标识,在log里带上这个标识,将一个request的log通过唯一标识串成一串。 

@WebFilter(filterName = "myFilter",urlPatterns = "/*")
public class LogFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        String replace = UUID.randomUUID().toString().replace("-", "");
        LogHolder.setLogId(replace);
        LogUtil.info("thread:"+Thread.currentThread().getName() + ",uuid : " + replace+",url:"+((HttpServletRequest) request).getRequestURI());
        chain.doFilter(request, response);
        LogHolder.remove();
    }

    @Override
    public void destroy() {

    }
}

 

业务系统日志追踪
@WebFilter(filterName = "myFilter",urlPatterns = "/*")
public class LogFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        String replace = UUID.randomUUID().toString().replace("-", "");
        LogHolder.setLogId(replace);
        LogUtil.info("thread:"+Thread.currentThread().getName() + ",uuid : " + replace+",url:"+((HttpServletRequest) request).getRequestURI());
        chain.doFilter(request, response);
        LogHolder.remove();
    }

    @Override
    public void destroy() {

    }
}
业务系统日志追踪

相关文章:

  • 2022-12-23
  • 2021-07-24
  • 2021-12-24
  • 2021-10-02
  • 2021-04-19
  • 2021-07-24
  • 2021-09-09
  • 2022-12-23
猜你喜欢
  • 2021-07-03
  • 2021-07-14
  • 2022-12-23
  • 2021-07-18
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案