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();
+ }
+
}