diff --git a/glc-logback-appender/src/main/java/top/gotoeasy/framework/glc/logback/appender/GlcAmqpAppender.java b/glc-logback-appender/src/main/java/top/gotoeasy/framework/glc/logback/appender/GlcAmqpAppender.java index 0165b52..6cb69a5 100644 --- a/glc-logback-appender/src/main/java/top/gotoeasy/framework/glc/logback/appender/GlcAmqpAppender.java +++ b/glc-logback-appender/src/main/java/top/gotoeasy/framework/glc/logback/appender/GlcAmqpAppender.java @@ -76,7 +76,7 @@ public class GlcAmqpAppender extends AppenderBase { // 异步发送日志 executor.execute(() -> { - sendToRabbitMQ(layout.doLayout(event)); + sendToRabbitMQ(layout.doLayout(event), event); }); } @@ -85,7 +85,7 @@ public class GlcAmqpAppender extends AppenderBase { * * @param text 日志 */ - protected void sendToRabbitMQ(String text) { + protected void sendToRabbitMQ(String text, ILoggingEvent event) { if (text == null) { return; // ignore } @@ -95,11 +95,21 @@ public class GlcAmqpAppender extends AppenderBase { initConnectionChannel(); } + String traceid = MdcUtil.getTraceId(); + String clientip = MdcUtil.getClientIp(); + String body = "{\"text\":" + Util.encodeStr(text.trim()); - body += ",\"date\":" + Util.encodeStr(Util.getDateString()); + body += ",\"date\":\"" + Util.getDateString() + "\""; body += ",\"system\":" + Util.encodeStr(getSystem()); body += ",\"servername\":" + Util.encodeStr(Util.getServerName()); body += ",\"serverip\":" + Util.encodeStr(Util.getServerIp()); + body += ",\"loglevel\":\"" + event.getLevel().toString() + "\""; + if (!"".equals(traceid)) { + body += ",\"traceid\":" + Util.encodeStr(traceid); + } + if (!"".equals(clientip)) { + body += ",\"clientip\":" + Util.encodeStr(clientip); + } body += "}"; channel.basicPublish("", "glc-log-queue", null, body.getBytes("utf-8")); diff --git a/glc-logback-appender/src/main/java/top/gotoeasy/framework/glc/logback/appender/GlcHttpJsonAppender.java b/glc-logback-appender/src/main/java/top/gotoeasy/framework/glc/logback/appender/GlcHttpJsonAppender.java index b5e2416..e8257d6 100644 --- a/glc-logback-appender/src/main/java/top/gotoeasy/framework/glc/logback/appender/GlcHttpJsonAppender.java +++ b/glc-logback-appender/src/main/java/top/gotoeasy/framework/glc/logback/appender/GlcHttpJsonAppender.java @@ -46,7 +46,7 @@ public class GlcHttpJsonAppender extends AppenderBase { // 异步发送日志到GLC executor.execute(() -> { - submitToGlogCenter(layout.doLayout(event)); + submitToGlogCenter(layout.doLayout(event), event); }); } @@ -57,7 +57,7 @@ public class GlcHttpJsonAppender extends AppenderBase { * * @param text 日志 */ - protected void submitToGlogCenter(String text) { + protected void submitToGlogCenter(String text, ILoggingEvent event) { if (text == null) { return; // ignore } @@ -65,11 +65,21 @@ public class GlcHttpJsonAppender extends AppenderBase { DataOutputStream dos = null; String body = null; try { + String traceid = MdcUtil.getTraceId(); + String clientip = MdcUtil.getClientIp(); + body = "{\"text\":" + Util.encodeStr(text.trim()); - body += ",\"date\":" + Util.encodeStr(Util.getDateString()); + body += ",\"date\":\"" + Util.getDateString() + "\""; body += ",\"system\":" + Util.encodeStr(getSystem()); body += ",\"servername\":" + Util.encodeStr(Util.getServerName()); body += ",\"serverip\":" + Util.encodeStr(Util.getServerIp()); + body += ",\"loglevel\":\"" + event.getLevel().toString() + "\""; + if (!"".equals(traceid)) { + body += ",\"traceid\":" + Util.encodeStr(traceid); + } + if (!"".equals(clientip)) { + body += ",\"clientip\":" + Util.encodeStr(clientip); + } body += "}"; URL url = new URL(glcApiUrl); 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 new file mode 100644 index 0000000..84ed615 --- /dev/null +++ b/glc-logback-appender/src/main/java/top/gotoeasy/framework/glc/logback/appender/MdcUtil.java @@ -0,0 +1,46 @@ +package top.gotoeasy.framework.glc.logback.appender; + +import java.util.UUID; + +import org.slf4j.MDC; + +public class MdcUtil { + + public static final String TRACE_ID = "traceid"; + public static final String CLIENT_IP = "clientip"; + + public static String getClientIp() { + String str = MDC.get(CLIENT_IP); + return str == null ? "" : str; + } + + public static String getTraceId() { + String str = MDC.get(TRACE_ID); + return str == null ? "" : str; + } + + public static void setClientIp(String clientip) { + MDC.put(CLIENT_IP, clientip); + } + + public static void setTraceId(String traceid) { + MDC.put(TRACE_ID, traceid); + } + + public static void removeClientIp() { + MDC.remove(CLIENT_IP); + } + + public static void removeTraceId() { + MDC.remove(TRACE_ID); + } + + public static void clear() { + MDC.clear(); + } + + public static String generateTraceId() { + return UUID.randomUUID().toString().replaceAll("-", ""); + } + +} 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 658f7c0..d32e743 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,7 +1,6 @@ package top.gotoeasy.framework.glc.logback.appender; import java.net.InetAddress; -import java.net.UnknownHostException; import java.text.CharacterIterator; import java.text.SimpleDateFormat; import java.text.StringCharacterIterator; @@ -16,7 +15,7 @@ public class Util { if ("".equals(serverName)) { try { serverName = InetAddress.getLocalHost().getHostName(); - } catch (UnknownHostException e) { + } catch (Exception e) { // ignore } } @@ -27,7 +26,7 @@ public class Util { if ("".equals(serverIp)) { try { serverIp = InetAddress.getLocalHost().getHostAddress(); - } catch (UnknownHostException e) { + } catch (Exception e) { // ignore } } diff --git a/glc/ldb/engine.go b/glc/ldb/engine.go index 06a9e96..f30993b 100644 --- a/glc/ldb/engine.go +++ b/glc/ldb/engine.go @@ -48,7 +48,8 @@ func (e *Engine) AddLogDataModel(data *logdata.LogDataModel) { e.logStorage.AddLogDataModel(data) } -func (e *Engine) Search(searchKey string, system string, minDatetime string, maxDatetime string, pageSize int, currentDocId uint32, forward bool) *search.SearchResult { +func (e *Engine) Search(searchKey string, system string, minDatetime string, maxDatetime string, loglevel string, traceid string, + pageSize int, currentDocId uint32, forward bool) *search.SearchResult { // 检查修正pageSize if pageSize < 1 { @@ -60,7 +61,7 @@ func (e *Engine) Search(searchKey string, system string, minDatetime string, max // 分词后检索 var adds []string - adds = append(adds, system) + adds = append(adds, system, loglevel, traceid) kws := tokenizer.CutForSearchEx(searchKey, adds, nil) // 检索用关键词处理 if searchKey == "" { diff --git a/glc/ldb/engine_test.go b/glc/ldb/engine_test.go index a2eac29..dccdbdd 100644 --- a/glc/ldb/engine_test.go +++ b/glc/ldb/engine_test.go @@ -46,7 +46,7 @@ func Test_all(t *testing.T) { // } // time.Sleep(time.Duration(5) * time.Second) - rs := engine.Search(` them java `, "", "", "", 5, 0, true) + rs := engine.Search(` them java `, "", "", "", "", "", 5, 0, true) cmn.Println("共查到", rs.Total, "件") for _, v := range rs.Data { cmn.Println(v.Id, v.Text) diff --git a/glc/ldb/storage/logdata/logdata_model.go b/glc/ldb/storage/logdata/logdata_model.go index 20e5dbf..4192977 100644 --- a/glc/ldb/storage/logdata/logdata_model.go +++ b/glc/ldb/storage/logdata/logdata_model.go @@ -23,6 +23,7 @@ type LogDataModel struct { ClientIp string `json:"client,omitempty"` // 客户端IP TraceId string `json:"traceid,omitempty"` // 跟踪ID LogType string `json:"logtype,omitempty"` // 日志类型(1:登录日志、2:操作日志) + LogLevel string `json:"loglevel,omitempty"` // 日志级别(debug、info、error等) User string `json:"user,omitempty"` // 用户 Module string `json:"module,omitempty"` // 模块 Operation string `json:"action,omitempty"` // 操作 diff --git a/glc/ldb/storage/logdata/logdata_storage.go b/glc/ldb/storage/logdata/logdata_storage.go index 722d787..aeaad9b 100644 --- a/glc/ldb/storage/logdata/logdata_storage.go +++ b/glc/ldb/storage/logdata/logdata_storage.go @@ -213,8 +213,11 @@ func (s *LogDataStorage) createInvertedIndex() int { if docm.Operation != "" { adds = append(adds, "*"+docm.Operation) } + if docm.LogLevel != "" { + adds = append(adds, "-"+docm.LogLevel) + } kws := tokenizer.CutForSearchEx(docm.Text+" "+docm.System+" "+docm.ServerName+" "+docm.ServerIp+ - " "+docm.ClientIp+" "+docm.TraceId+" "+docm.User+" "+docm.Module+" "+docm.Operation, adds, docm.Sensitives) // 两数组参数的元素可以重复或空白,会被判断整理 + " "+docm.ClientIp+" "+docm.TraceId+" "+docm.LogLevel+" "+docm.User+" "+docm.Module+" "+docm.Operation, adds, docm.Sensitives) // 两数组参数的元素可以重复或空白,会被判断整理 // 每个关键词都创建反向索引 for _, word := range kws { diff --git a/glc/onstart/version.go b/glc/onstart/version.go index 4c81aea..2631b71 100644 --- a/glc/onstart/version.go +++ b/glc/onstart/version.go @@ -1,3 +1,3 @@ package onstart -const VERSION = "glogcenter 0.10.0" +const VERSION = "glogcenter 0.10.1" diff --git a/glc/www/controller/log_search_controller.go b/glc/www/controller/log_search_controller.go index ea8502f..689de84 100644 --- a/glc/www/controller/log_search_controller.go +++ b/glc/www/controller/log_search_controller.go @@ -24,12 +24,20 @@ func LogSearchController(req *gweb.HttpRequest) *gweb.HttpResult { datetimeFrom := req.GetFormParameter("datetimeFrom") datetimeTo := req.GetFormParameter("datetimeTo") system := req.GetFormParameter("system") + loglevel := req.GetFormParameter("loglevel") + traceid := req.GetFormParameter("traceid") if !cmn.IsBlank(system) { system = "~" + cmn.Trim(system) } + if !cmn.IsBlank(traceid) { + traceid = "$" + cmn.Trim(traceid) + } + if !cmn.IsBlank(loglevel) { + loglevel = "-" + cmn.Trim(loglevel) + } eng := ldb.NewEngine(storeName) - rs := eng.Search(searchKey, system, datetimeFrom, datetimeTo, pageSize, currentId, forward) + rs := eng.Search(searchKey, system, datetimeFrom, datetimeTo, loglevel, traceid, pageSize, currentId, forward) return gweb.Result(rs) } diff --git a/glc/www/web/src/views/search.vue b/glc/www/web/src/views/search.vue index 40a97d6..89153db 100644 --- a/glc/www/web/src/views/search.vue +++ b/glc/www/web/src/views/search.vue @@ -10,7 +10,7 @@
- + @@ -125,6 +138,8 @@ + +