Skip to content

分布式日志追踪

yangyp8110 edited this page Feb 2, 2019 · 2 revisions

文件列表

代码示例

LogFilter

@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() {

    }
}

LogHolder

public class LogHolder {
    private LogHolder() {
    }

    public static final ThreadLocal<String> LOG_ID = new NamedThreadLocal<>("LOG_ID_HOLDER");

    public static String getLogId() {
        return LOG_ID.get();
    }

    public static void setLogId(String logId) {
        LOG_ID.set(logId);
    }

    public static void remove() {
        LOG_ID.remove();
    }
}

LogUtil

@Slf4j
public class LogUtil {

    public static void info(String content, Object... args) {
        log.info(String.format("LogFlowId: %s , %s", LogHolder.getLogId(), content), args);
    }

    public static void warn(String content, Object... args) {
        log.info(String.format("LogFlowId: %s , %s", LogHolder.getLogId(), content), args);
    }

    public static void error(String content, Exception ex) {
        log.error(String.format("LogFlowId: %s , %s", LogHolder.getLogId(), content), ex);
    }
}

TestController

    @RequestMapping("/log")
    public void writelog() {
        LogUtil.info("request begin");
        ExecuterServiceUtil.run(() -> test());
        LogUtil.info("request end");
    }

    public void test() {
        long l = System.currentTimeMillis();
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        LogUtil.info("操作耗时:" + (System.currentTimeMillis() - l) + " ms");
    }

ExecuterServiceUtil

public class ExecuterServiceUtil {
    private static Integer corePoolSize = 2;
    private static Integer maximumPoolSize = 2;
    private static Long time = 10L;
    private static final ExecutorService EXECUTOR_SERVICE = new ThreadPoolExecutor(corePoolSize, maximumPoolSize, time, TimeUnit.SECONDS,
            new ArrayBlockingQueue<>(100));

    public static void run(Runnable run) {
        String logId = LogHolder.getLogId();
        EXECUTOR_SERVICE.execute(() -> {
            LogHolder.setLogId(logId);
            run.run();
            LogHolder.remove();
        });
    }
}
Clone this wiki locally