分布式日志追踪
yangyp8110 edited this page Feb 2, 2019
·
2 revisions
@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() {
}
}
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();
}
}
@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);
}
}
@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");
}
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();
});
}
}