From 59204cdb0c7c287c347cfc951fffa37184840272 Mon Sep 17 00:00:00 2001 From: Alireza Ahmadi Date: Sun, 30 Jul 2023 16:29:49 +0200 Subject: [PATCH] in mem logs & syslog --- logger/logger.go | 72 ++++++++++++++++++++++++++++++++++++---- web/controller/server.go | 8 ++--- web/html/xui/index.html | 33 +++++++++++++----- web/service/server.go | 36 ++++++++++---------- 4 files changed, 111 insertions(+), 38 deletions(-) diff --git a/logger/logger.go b/logger/logger.go index cb5e8360..6e824c78 100644 --- a/logger/logger.go +++ b/logger/logger.go @@ -1,25 +1,47 @@ package logger import ( - "github.com/op/go-logging" + "fmt" "os" + "time" + + "github.com/op/go-logging" ) var logger *logging.Logger +var logBuffer []struct { + time string + level logging.Level + log string +} func init() { InitLogger(logging.INFO) } func InitLogger(level logging.Level) { - format := logging.MustStringFormatter( - `%{time:2006/01/02 15:04:05} %{level} - %{message}`, - ) newLogger := logging.MustGetLogger("x-ui") - backend := logging.NewLogBackend(os.Stderr, "", 0) + var err error + var backend logging.Backend + var format logging.Formatter + ppid := os.Getppid() + + if ppid == 1 { + backend, err = logging.NewSyslogBackend("") + format = logging.MustStringFormatter( + `%{level} - %{message}`, + ) + } + if err != nil || ppid != 1 { + backend = logging.NewLogBackend(os.Stderr, "", 0) + format = logging.MustStringFormatter( + `%{time:2006/01/02 15:04:05} %{level} - %{message}`, + ) + } + backendFormatter := logging.NewBackendFormatter(backend, format) backendLeveled := logging.AddModuleLevel(backendFormatter) - backendLeveled.SetLevel(level, "") + backendLeveled.SetLevel(level, "x-ui") newLogger.SetBackend(backendLeveled) logger = newLogger @@ -27,32 +49,70 @@ func InitLogger(level logging.Level) { func Debug(args ...interface{}) { logger.Debug(args...) + addToBuffer("DEBUG", fmt.Sprint(args...)) } func Debugf(format string, args ...interface{}) { logger.Debugf(format, args...) + addToBuffer("DEBUG", fmt.Sprintf(format, args...)) } func Info(args ...interface{}) { logger.Info(args...) + addToBuffer("INFO", fmt.Sprint(args...)) } func Infof(format string, args ...interface{}) { logger.Infof(format, args...) + addToBuffer("INFO", fmt.Sprintf(format, args...)) } func Warning(args ...interface{}) { logger.Warning(args...) + addToBuffer("WARNING", fmt.Sprint(args...)) } func Warningf(format string, args ...interface{}) { logger.Warningf(format, args...) + addToBuffer("WARNING", fmt.Sprintf(format, args...)) } func Error(args ...interface{}) { logger.Error(args...) + addToBuffer("ERROR", fmt.Sprint(args...)) } func Errorf(format string, args ...interface{}) { logger.Errorf(format, args...) + addToBuffer("ERROR", fmt.Sprintf(format, args...)) +} + +func addToBuffer(level string, newLog string) { + t := time.Now() + if len(logBuffer) >= 10240 { + logBuffer = logBuffer[1:] + } + + logLevel, _ := logging.LogLevel(level) + logBuffer = append(logBuffer, struct { + time string + level logging.Level + log string + }{ + time: t.Format("2006/01/02 15:04:05"), + level: logLevel, + log: newLog, + }) +} + +func GetLogs(c int, level string) []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)) + } + } + return output } diff --git a/web/controller/server.go b/web/controller/server.go index 58587ff5..b7ed4771 100644 --- a/web/controller/server.go +++ b/web/controller/server.go @@ -118,11 +118,9 @@ func (a *ServerController) restartXrayService(c *gin.Context) { func (a *ServerController) getLogs(c *gin.Context) { count := c.Param("count") - logs, err := a.serverService.GetLogs(count) - if err != nil { - jsonMsg(c, "getLogs", err) - return - } + level := c.PostForm("level") + syslog := c.PostForm("syslog") + logs := a.serverService.GetLogs(count, level, syslog) jsonObj(c, logs, nil) } diff --git a/web/html/xui/index.html b/web/html/xui/index.html index 9d8fc749..58f12675 100644 --- a/web/html/xui/index.html +++ b/web/html/xui/index.html @@ -110,7 +110,7 @@ {{ i18n "menu.link" }}: - {{ i18n "pages.index.logs" }} + {{ i18n "pages.index.logs" }} {{ i18n "pages.index.config" }} {{ i18n "pages.index.backup" }} @@ -211,7 +211,7 @@ 10 20 @@ -219,8 +219,22 @@ 100 + + + Debug + Info + Warning + Error + + + + + - +