diff --git a/logger/logger.go b/logger/logger.go index 35c5c0ac..1cf76830 100644 --- a/logger/logger.go +++ b/logger/logger.go @@ -34,9 +34,9 @@ func InitLogger(level logging.Level) { backend = logging.NewLogBackend(os.Stderr, "", 0) } if ppid > 0 && err != nil { - format = logging.MustStringFormatter(`%{time:2006/01/02 15:04:05} %{level} - %{message}`) + format = logging.MustStringFormatter(`%{time:2006/01/02 15:04:05} %{level} —— %{message}`) } else { - format = logging.MustStringFormatter(`%{level} - %{message}`) + format = logging.MustStringFormatter(`%{level} —— %{message}`) } backendFormatter := logging.NewBackendFormatter(backend, format) @@ -115,14 +115,12 @@ func addToBuffer(level string, newLog string) { }) } -func GetLogs(c int, level string) []string { +func GetLogs() []string { var output []string - logLevel, _ := logging.LogLevel(level) - for i := len(logBuffer) - 1; i >= 0 && len(output) <= c; i-- { - if logBuffer[i].level <= logLevel { - output = append(output, fmt.Sprintf("%s %s - %s", logBuffer[i].time, logBuffer[i].level, logBuffer[i].log)) - } + for _, entry := range logBuffer { + output = append(output, fmt.Sprintf("%s %s —— %s", entry.time, entry.level, entry.log)) } + return output } diff --git a/web/assets/js/util/index.js b/web/assets/js/util/index.js index 75cf915d..44af6630 100644 --- a/web/assets/js/util/index.js +++ b/web/assets/js/util/index.js @@ -81,11 +81,20 @@ class PromiseUtil { } class RandomUtil { - static getSeq({ hasNumbers = true, hasLowercase = true, hasUppercase = true } = {}) { + static getSeq({ type = "default", hasNumbers = true, hasLowercase = true, hasUppercase = true } = {}) { let seq = ''; - if (hasNumbers) seq += "0123456789"; - if (hasLowercase) seq += "abcdefghijklmnopqrstuvwxyz"; - if (hasUppercase) seq += "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + + switch (type) { + case "hex": + seq += "0123456789abcdef"; + break; + default: + if (hasNumbers) seq += "0123456789"; + if (hasLowercase) seq += "abcdefghijklmnopqrstuvwxyz"; + if (hasUppercase) seq += "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + break; + } + return seq; } @@ -107,7 +116,7 @@ class RandomUtil { static randomShortIds() { const lengths = [2, 4, 6, 8, 10, 12, 14, 16].sort(() => Math.random() - 0.5); - return lengths.map(len => this.randomSeq(len)).join(','); + return lengths.map(len => this.randomSeq(len, { type: "hex" })).join(','); } static randomLowerAndNum(len) { diff --git a/web/controller/server.go b/web/controller/server.go index fc7756ba..8dcfdfff 100644 --- a/web/controller/server.go +++ b/web/controller/server.go @@ -118,10 +118,8 @@ func (a *ServerController) restartXrayService(c *gin.Context) { } func (a *ServerController) getLogs(c *gin.Context) { - count := c.Param("count") - level := c.PostForm("level") syslog := c.PostForm("syslog") - logs := a.serverService.GetLogs(count, level, syslog) + logs := a.serverService.GetLogs(syslog) jsonObj(c, logs, nil) } diff --git a/web/html/xui/index.html b/web/html/xui/index.html index e78940fd..7677d5bd 100644 --- a/web/html/xui/index.html +++ b/web/html/xui/index.html @@ -296,37 +296,51 @@ @click="openLogs()"> - - - - - 10 - 20 - 50 - 100 - 500 - - - Debug - Info - Notice - Warning - Error - - - - - SysLog - - - - - - -
+ + + + + + 10 + 20 + 50 + 100 + 500 + + + Debug + Info + Warning + Error + + + + + SysLog + + + + + + + + + + + + + + + 0 ? this.formatLogs(this.logs) : "No Record..."; + this.logs = this.getLogs(logs); }, - formatLogs(logs) { - let formattedLogs = ''; - const levels = ["DEBUG","INFO","NOTICE","WARNING","ERROR"]; - const levelColors = ["#3c89e8","#008771","#008771","#f37b24","#e04141","#bcbcbc"]; + getLogs(logs) { + if (logs === null) return [] - logs.forEach((log, index) => { - let [data, message] = log.split(" - ",2); - const parts = data.split(" ") - if(index>0) formattedLogs += '
'; + return logs.map((log) => { + let message; + let level; + let date; + let sender; - if (parts.length === 3) { - const d = parts[0]; - const t = parts[1]; - const level = parts[2]; - const levelIndex = levels.indexOf(level,levels) || 5; - - //formattedLogs += `${index + 1}.`; - formattedLogs += `${d} ${t} `; - formattedLogs += `${level}`; + if (log.includes("XRAY:")) { + sender = "xray" } else { - const levelIndex = levels.indexOf(data,levels) || 5; - formattedLogs += `${data}`; + sender = "3x-ui" } - if(message){ - if(message.startsWith("XRAY:")) - message = "XRAY: " + message.substring(5); - else - message = "X-UI: " + message; + if (sender === "xray") { + if (log.toLowerCase().includes("failed")) { + level = "err" + } else if (log.includes("[Warning]")) { + level = "warning" + } else if (log.includes("[Info]")) { + level = "info" + } else { + level = "debug" + } + } else { + if (log.includes("ERROR") || log.toLowerCase().includes("failed")) { + level = "err" + } else if (log.includes("DEBUG")) { + level = "debug" + } else if (log.includes("INFO")) { + level = "info" + } } - formattedLogs += message ? ' - ' + message : ''; - }); + // date = `` + // message = `${logs.split("—")[1]}` - return formattedLogs; + date = `${log.split(" ")[0]} ${log.split(" ")[1]}` + message = `${log.split("——")[1]}` + + return { + message: message, + level: level, + date: date, + sender: sender + } + }).reverse() }, hide() { this.visible = false; @@ -597,7 +629,7 @@ }, async openLogs(){ logModal.loading = true; - const msg = await HttpUtil.post('server/logs/'+logModal.rows,{level: logModal.level, syslog: logModal.syslog}); + const msg = await HttpUtil.post('server/logs/'+logModal.rows,{syslog: logModal.syslog}); if (!msg.success) { return; } diff --git a/web/service/server.go b/web/service/server.go index db604bc9..388e6e5c 100644 --- a/web/service/server.go +++ b/web/service/server.go @@ -418,12 +418,11 @@ func (s *ServerService) UpdateXray(version string) error { return nil } -func (s *ServerService) GetLogs(count string, level string, syslog string) []string { - c, _ := strconv.Atoi(count) +func (s *ServerService) GetLogs(syslog string) []string { var lines []string if syslog == "true" { - cmdArgs := []string{"journalctl", "-u", "x-ui", "--no-pager", "-n", count, "-p", level} + cmdArgs := []string{"journalctl", "-u", "x-ui", "--no-pager"} // Run the command cmd := exec.Command(cmdArgs[0], cmdArgs[1:]...) var out bytes.Buffer @@ -434,7 +433,7 @@ func (s *ServerService) GetLogs(count string, level string, syslog string) []str } lines = strings.Split(out.String(), "\n") } else { - lines = logger.GetLogs(c, level) + lines = logger.GetLogs() } return lines