From 5e63bd9424164a177e316bcaffbad73462763873 Mon Sep 17 00:00:00 2001 From: gotoeasy Date: Sun, 22 Oct 2023 11:19:49 +0800 Subject: [PATCH] 0.12.0 --- glc-logback-appender/pom.xml | 9 ++- .../framework/glc/filter/GlcFilter.java | 57 +++++++++++++++++++ .../glc/logback/appender/MdcUtil.java | 2 +- .../framework/glc/logback/appender/Util.java | 10 ++++ 4 files changed, 76 insertions(+), 2 deletions(-) create mode 100644 glc-logback-appender/src/main/java/top/gotoeasy/framework/glc/filter/GlcFilter.java diff --git a/glc-logback-appender/pom.xml b/glc-logback-appender/pom.xml index fba3f4f..c942edf 100644 --- a/glc-logback-appender/pom.xml +++ b/glc-logback-appender/pom.xml @@ -5,7 +5,7 @@ top.gotoeasy glc-logback-appender - 0.11.1 + 0.12.0 logback appender for glogcenter @@ -74,6 +74,13 @@ 5.15.0 + + javax.servlet + javax.servlet-api + 3.1.0 + provided + + diff --git a/glc-logback-appender/src/main/java/top/gotoeasy/framework/glc/filter/GlcFilter.java b/glc-logback-appender/src/main/java/top/gotoeasy/framework/glc/filter/GlcFilter.java new file mode 100644 index 0000000..6d4d10d --- /dev/null +++ b/glc-logback-appender/src/main/java/top/gotoeasy/framework/glc/filter/GlcFilter.java @@ -0,0 +1,57 @@ +package top.gotoeasy.framework.glc.filter; + +import java.io.IOException; + +import javax.servlet.Filter; +import javax.servlet.FilterChain; +import javax.servlet.FilterConfig; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; + +import top.gotoeasy.framework.glc.logback.appender.MdcUtil; + +/** + * 过滤器,自动设定GLC所需的traceid、clientip,优先从请求头中获取 + */ +public class GlcFilter implements Filter { + + @Override + public void init(FilterConfig filterConfig) throws ServletException { + } + + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) + throws IOException, ServletException { + + // 设定日志中心相关的的traceid、clientip + HttpServletRequest httpServletRequest = (HttpServletRequest)request; + String traceid = httpServletRequest.getHeader(MdcUtil.TRACE_ID); + MdcUtil.setTraceId((traceid == null || traceid.length() == 0) ? MdcUtil.generateTraceId() : traceid); + MdcUtil.setClientIp(getIpAddr(httpServletRequest)); + + chain.doFilter(request, response); + } + + @Override + public void destroy() { + } + + private static String getIpAddr(HttpServletRequest request) { + String[] headerNames = { "X-Forwarded-For", "X-Real-IP", "Proxy-Client-IP", "WL-Proxy-Client-IP", + "HTTP_CLIENT_IP", "HTTP_X_FORWARDED_FOR" }; + for (String headerName : headerNames) { + String ip = request.getHeader(headerName); + if (ip != null && ip.length() > 0 && !"unknown".equalsIgnoreCase(ip)) { + int index = ip.indexOf(','); + if (index > 0) { + ip = ip.substring(0, index); + } + return ip; + } + } + return request.getRemoteAddr(); + } + +} diff --git a/glc-logback-appender/src/main/java/top/gotoeasy/framework/glc/logback/appender/MdcUtil.java b/glc-logback-appender/src/main/java/top/gotoeasy/framework/glc/logback/appender/MdcUtil.java index 8f34417..a4bc539 100644 --- a/glc-logback-appender/src/main/java/top/gotoeasy/framework/glc/logback/appender/MdcUtil.java +++ b/glc-logback-appender/src/main/java/top/gotoeasy/framework/glc/logback/appender/MdcUtil.java @@ -30,7 +30,7 @@ public class MdcUtil { } public static String generateTraceId() { - return UUID.randomUUID().toString().replaceAll("-", ""); + return Util.hash(UUID.randomUUID().toString()); } } diff --git a/glc-logback-appender/src/main/java/top/gotoeasy/framework/glc/logback/appender/Util.java b/glc-logback-appender/src/main/java/top/gotoeasy/framework/glc/logback/appender/Util.java index d32e743..7fbe81c 100644 --- a/glc-logback-appender/src/main/java/top/gotoeasy/framework/glc/logback/appender/Util.java +++ b/glc-logback-appender/src/main/java/top/gotoeasy/framework/glc/logback/appender/Util.java @@ -1,5 +1,6 @@ package top.gotoeasy.framework.glc.logback.appender; +import java.math.BigDecimal; import java.net.InetAddress; import java.text.CharacterIterator; import java.text.SimpleDateFormat; @@ -99,4 +100,13 @@ public class Util { } } + public static String hash(String str) { + int rs = 53653; + int i = (str == null ? 0 : str.length()); + while (i > 0) { + rs = (rs * 33) ^ str.charAt(--i); + } + return new BigDecimal(Long.valueOf(rs & 0x0FFFFFFFFL)).toPlainString(); + } + }