From 9d38e5fef7591f1e8292ea7a602a593e4f0815e2 Mon Sep 17 00:00:00 2001 From: neverteaser Date: Fri, 19 Mar 2021 22:58:47 +0800 Subject: [PATCH] =?UTF-8?q?fix(be):=E4=BD=BF=E7=94=A8next-terminal=20?= =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89=E7=9A=84=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.go | 22 --- {server => pkg}/guacd/guacd.go | 0 pkg/log/logger.go | 252 +++++++++++++++++++++++++++++++++ pkg/middleware/logger.go | 90 ------------ server/api/login-log.go | 4 +- server/api/routes.go | 19 ++- server/api/session.go | 14 +- server/api/ssh.go | 22 +-- server/api/ticker.go | 7 +- server/api/tunnel.go | 18 +-- server/api/user.go | 8 +- server/constant/const.go | 2 +- server/global/store.go | 2 +- server/repository/property.go | 2 +- server/service/job.go | 18 +-- server/service/mail.go | 6 +- server/service/property.go | 2 +- server/service/user.go | 9 +- server/term/test/test_ssh.go | 9 +- 19 files changed, 322 insertions(+), 184 deletions(-) rename {server => pkg}/guacd/guacd.go (100%) create mode 100644 pkg/log/logger.go delete mode 100644 pkg/middleware/logger.go diff --git a/main.go b/main.go index 60fc13e..ff73afd 100644 --- a/main.go +++ b/main.go @@ -1,19 +1,14 @@ package main import ( - "bytes" "fmt" - "io" - "os" "next-terminal/server/api" "next-terminal/server/config" "next-terminal/server/global" - nested "github.com/antonfisher/nested-logrus-formatter" "github.com/labstack/gommon/log" "github.com/robfig/cron/v3" - "github.com/sirupsen/logrus" ) const Version = "v0.3.4" @@ -35,23 +30,6 @@ func Run() error { \____|__ /\___ >__/\_ \ |__| |____| \___ >__| |__|_| /__|___| (____ /____/ \/ \/ \/ \/ \/ \/ \/ ` + Version + "\n\n") - var err error - //logrus.SetReportCaller(true) - logrus.SetLevel(logrus.DebugLevel) - logrus.SetFormatter(&nested.Formatter{ - HideKeys: true, - FieldsOrder: []string{"component", "category"}, - }) - - writer1 := &bytes.Buffer{} - writer2 := os.Stdout - writer3, err := os.OpenFile("log/next-terminal.log", os.O_WRONLY|os.O_CREATE, 0755) - if err != nil { - log.Fatalf("create file log.txt failed: %v", err) - } - - logrus.SetOutput(io.MultiWriter(writer1, writer2, writer3)) - global.Config = config.SetupConfig() global.Store = global.NewStore() diff --git a/server/guacd/guacd.go b/pkg/guacd/guacd.go similarity index 100% rename from server/guacd/guacd.go rename to pkg/guacd/guacd.go diff --git a/pkg/log/logger.go b/pkg/log/logger.go new file mode 100644 index 0000000..635b1fe --- /dev/null +++ b/pkg/log/logger.go @@ -0,0 +1,252 @@ +package log + +import ( + "fmt" + "io" + "os" + "path" + "strconv" + "time" + + "github.com/labstack/echo/v4" + "github.com/sirupsen/logrus" +) + +var stdOut = NewLogger() + +// Trace logs a message at level Trace on the standard logger. +func Trace(args ...interface{}) { + stdOut.Trace(args...) +} + +// Debug logs a message at level Debug on the standard logger. +func Debug(args ...interface{}) { + stdOut.Debug(args...) +} + +// Print logs a message at level Info on the standard logger. +func Print(args ...interface{}) { + stdOut.Print(args...) +} + +// Info logs a message at level Info on the standard logger. +func Info(args ...interface{}) { + stdOut.Info(args...) +} + +// Warn logs a message at level Warn on the standard logger. +func Warn(args ...interface{}) { + stdOut.Warn(args...) +} + +// Warning logs a message at level Warn on the standard logger. +func Warning(args ...interface{}) { + stdOut.Warning(args...) +} + +// Error logs a message at level Error on the standard logger. +func Error(args ...interface{}) { + stdOut.Error(args...) +} + +// Panic logs a message at level Panic on the standard logger. +func Panic(args ...interface{}) { + stdOut.Panic(args...) +} + +// Fatal logs a message at level Fatal on the standard logger then the process will exit with status set to 1. +func Fatal(args ...interface{}) { + stdOut.Fatal(args...) +} + +// Tracef logs a message at level Trace on the standard logger. +func Tracef(format string, args ...interface{}) { + stdOut.Tracef(format, args...) +} + +// Debugf logs a message at level Debug on the standard logger. +func Debugf(format string, args ...interface{}) { + stdOut.Debugf(format, args...) +} + +// Printf logs a message at level Info on the standard logger. +func Printf(format string, args ...interface{}) { + stdOut.Printf(format, args...) +} + +// Infof logs a message at level Info on the standard logger. +func Infof(format string, args ...interface{}) { + stdOut.Infof(format, args...) +} + +// Warnf logs a message at level Warn on the standard logger. +func Warnf(format string, args ...interface{}) { + stdOut.Warnf(format, args...) +} + +// Warningf logs a message at level Warn on the standard logger. +func Warningf(format string, args ...interface{}) { + stdOut.Warningf(format, args...) +} + +// Errorf logs a message at level Error on the standard logger. +func Errorf(format string, args ...interface{}) { + stdOut.Errorf(format, args...) +} + +// Panicf logs a message at level Panic on the standard logger. +func Panicf(format string, args ...interface{}) { + stdOut.Panicf(format, args...) +} + +// Fatalf logs a message at level Fatal on the standard logger then the process will exit with status set to 1. +func Fatalf(format string, args ...interface{}) { + stdOut.Fatalf(format, args...) +} + +// Traceln logs a message at level Trace on the standard logger. +func Traceln(args ...interface{}) { + stdOut.Traceln(args...) +} + +// Debugln logs a message at level Debug on the standard logger. +func Debugln(args ...interface{}) { + stdOut.Debugln(args...) +} + +// Println logs a message at level Info on the standard logger. +func Println(args ...interface{}) { + stdOut.Println(args...) +} + +// Infoln logs a message at level Info on the standard logger. +func Infoln(args ...interface{}) { + stdOut.Infoln(args...) +} + +// Warnln logs a message at level Warn on the standard logger. +func Warnln(args ...interface{}) { + stdOut.Warnln(args...) +} + +// Warningln logs a message at level Warn on the standard logger. +func Warningln(args ...interface{}) { + stdOut.Warningln(args...) +} + +// Errorln logs a message at level Error on the standard logger. +func Errorln(args ...interface{}) { + stdOut.Errorln(args...) +} + +// Panicln logs a message at level Panic on the standard logger. +func Panicln(args ...interface{}) { + stdOut.Panicln(args...) +} + +// Fatalln logs a message at level Fatal on the standard logger then the process will exit with status set to 1. +func Fatalln(args ...interface{}) { + stdOut.Fatalln(args...) +} + +// WithError creates an entry from the standard logger and adds an error to it, using the value defined in ErrorKey as key. +func WithError(err error) *logrus.Entry { + return stdOut.WithField(logrus.ErrorKey, err) +} + +// WithField creates an entry from the standard logger and adds a field to +// it. If you want multiple fields, use `WithFields`. +// +// Note that it doesn't log until you call Debug, Print, Info, Warn, Fatal +// or Panic on the Entry it returns. +func WithField(key string, value interface{}) *logrus.Entry { + return stdOut.WithField(key, value) +} + +// Logrus : implement log +type Logrus struct { + *logrus.Logger +} + +// GetEchoLogger for e.l +func NewLogger() Logrus { + logFilePath := "" + if dir, err := os.Getwd(); err == nil { + logFilePath = dir + "/log/" + } + if err := os.MkdirAll(logFilePath, 0755); err != nil { + fmt.Println(err.Error()) + } + // TODO 滚动日志 + logFileName := "next-terminal.log" + //日志文件 + fileName := path.Join(logFilePath, logFileName) + if _, err := os.Stat(fileName); err != nil { + if _, err := os.Create(fileName); err != nil { + fmt.Println(err.Error()) + } + } + //写入文件 + src, err := os.OpenFile(fileName, os.O_APPEND|os.O_WRONLY, os.ModeAppend) + if err != nil { + fmt.Println("err", err) + } + + //实例化 + logger := logrus.New() + + //设置输出 + logger.SetOutput(io.MultiWriter(os.Stdout, src)) + + //设置日志级别 + logger.SetLevel(logrus.DebugLevel) + //设置日志格式 + logger.SetFormatter(&logrus.TextFormatter{ + TimestampFormat: "2006-01-02 15:04:05", + }) + return Logrus{Logger: logger} +} + +func logrusMiddlewareHandler(c echo.Context, next echo.HandlerFunc) error { + l := NewLogger() + req := c.Request() + res := c.Response() + start := time.Now() + if err := next(c); err != nil { + c.Error(err) + } + stop := time.Now() + + p := req.URL.Path + + bytesIn := req.Header.Get(echo.HeaderContentLength) + + l.WithFields(map[string]interface{}{ + "time_rfc3339": time.Now().Format(time.RFC3339), + "remote_ip": c.RealIP(), + "host": req.Host, + "uri": req.RequestURI, + "method": req.Method, + "path": p, + "referer": req.Referer(), + "user_agent": req.UserAgent(), + "status": res.Status, + "latency": strconv.FormatInt(stop.Sub(start).Nanoseconds()/1000, 10), + "latency_human": stop.Sub(start).String(), + "bytes_in": bytesIn, + "bytes_out": strconv.FormatInt(res.Size, 10), + }).Info("Handled request") + + return nil +} + +func logger(next echo.HandlerFunc) echo.HandlerFunc { + return func(c echo.Context) error { + return logrusMiddlewareHandler(c, next) + } +} + +// Hook is a function to process log. +func Hook() echo.MiddlewareFunc { + return logger +} diff --git a/pkg/middleware/logger.go b/pkg/middleware/logger.go deleted file mode 100644 index 1f9256f..0000000 --- a/pkg/middleware/logger.go +++ /dev/null @@ -1,90 +0,0 @@ -package middleware - -import ( - "fmt" - "os" - "path" - "strconv" - "time" - - "github.com/labstack/echo/v4" - log "github.com/sirupsen/logrus" -) - -type NTLog struct { - *log.Logger -} - -func (l *NTLog) Level() { - -} - -func Logger() *log.Logger { - now := time.Now() - logFilePath := "" - if dir, err := os.Getwd(); err == nil { - logFilePath = dir + "/log/" - } - if err := os.MkdirAll(logFilePath, 0755); err != nil { - fmt.Println(err.Error()) - } - // TODO 滚动日志 - logFileName := now.Format("2006-01-02") + ".log" - //日志文件 - fileName := path.Join(logFilePath, logFileName) - if _, err := os.Stat(fileName); err != nil { - if _, err := os.Create(fileName); err != nil { - fmt.Println(err.Error()) - } - } - //写入文件 - src, err := os.OpenFile(fileName, os.O_APPEND|os.O_WRONLY, os.ModeAppend) - if err != nil { - fmt.Println("err", err) - } - - //实例化 - logger := log.New() - - //设置输出 - logger.Out = src - logger.SetOutput(os.Stdout) - - //设置日志级别 - logger.SetLevel(log.DebugLevel) - //设置日志格式 - logger.SetFormatter(&log.TextFormatter{ - TimestampFormat: "2006-01-02 15:04:05", - }) - return logger -} - -func LoggerToFile() echo.MiddlewareFunc { - logger := Logger() - return func(next echo.HandlerFunc) echo.HandlerFunc { - return func(c echo.Context) (err error) { - req := c.Request() - res := c.Response() - start := time.Now() - if err = next(c); err != nil { - c.Error(err) - } - stop := time.Now() - logger.Infof("%s [%v] %s %-7s %s %3d %s %13v %s %s", - c.RealIP(), - stop.Format(time.RFC3339), - req.Host, - req.Method, - req.RequestURI, - res.Status, - strconv.FormatInt(res.Size, 10), - stop.Sub(start).String(), - req.Referer(), - req.UserAgent(), - ) - return err - - } - } - -} diff --git a/server/api/login-log.go b/server/api/login-log.go index a313bb6..2b221f6 100644 --- a/server/api/login-log.go +++ b/server/api/login-log.go @@ -4,10 +4,10 @@ import ( "strconv" "strings" + "next-terminal/pkg/log" "next-terminal/server/global" "github.com/labstack/echo/v4" - "github.com/sirupsen/logrus" ) func LoginLogPagingEndpoint(c echo.Context) error { @@ -35,7 +35,7 @@ func LoginLogDeleteEndpoint(c echo.Context) error { token := split[i] global.Cache.Delete(token) if err := userService.Logout(token); err != nil { - logrus.WithError(err).Error("Cache Delete Failed") + log.WithError(err).Error("Cache Delete Failed") } } if err := loginLogRepository.DeleteByIdIn(split); err != nil { diff --git a/server/api/routes.go b/server/api/routes.go index 8682c23..5e035e2 100644 --- a/server/api/routes.go +++ b/server/api/routes.go @@ -7,8 +7,8 @@ import ( "strings" "time" + "next-terminal/pkg/log" "next-terminal/server/global" - "next-terminal/server/log" "next-terminal/server/model" "next-terminal/server/repository" "next-terminal/server/service" @@ -17,7 +17,6 @@ import ( "github.com/labstack/echo/v4" "github.com/labstack/echo/v4/middleware" "github.com/patrickmn/go-cache" - "github.com/sirupsen/logrus" "gorm.io/driver/mysql" "gorm.io/driver/sqlite" "gorm.io/gorm" @@ -54,13 +53,13 @@ func SetupRoutes(db *gorm.DB) *echo.Echo { InitService() if err := InitDBData(); err != nil { - logrus.WithError(err).Error("初始化数据异常") + log.WithError(err).Error("初始化数据异常") } e := echo.New() e.HideBanner = true - e.Logger = log.GetEchoLogger() - + //e.Logger = log.GetEchoLogger() + e.Use(log.Hook()) e.File("/", "web/build/index.html") e.File("/asciinema.html", "web/build/asciinema.html") e.File("/asciinema-player.js", "web/build/asciinema-player.js") @@ -284,7 +283,7 @@ func ResetPassword() error { if err := userRepository.Update(u); err != nil { return err } - logrus.Debugf("用户「%v」密码初始化为: %v", user.Username, password) + log.Debugf("用户「%v」密码初始化为: %v", user.Username, password) return nil } @@ -294,10 +293,10 @@ func SetupCache() *cache.Cache { mCache.OnEvicted(func(key string, value interface{}) { if strings.HasPrefix(key, Token) { token := GetTokenFormCacheKey(key) - logrus.Debugf("用户Token「%v」过期", token) + log.Debugf("用户Token「%v」过期", token) err := userService.Logout(token) if err != nil { - logrus.Errorf("退出登录失败 %v", err) + log.Errorf("退出登录失败 %v", err) } } }) @@ -334,13 +333,13 @@ func SetupDB() *gorm.DB { } if err != nil { - logrus.WithError(err).Panic("连接数据库异常") + log.WithError(err).Panic("连接数据库异常") } if err := db.AutoMigrate(&model.User{}, &model.Asset{}, &model.AssetAttribute{}, &model.Session{}, &model.Command{}, &model.Credential{}, &model.Property{}, &model.ResourceSharer{}, &model.UserGroup{}, &model.UserGroupMember{}, &model.LoginLog{}, &model.Num{}, &model.Job{}, &model.JobLog{}, &model.AccessSecurity{}); err != nil { - logrus.WithError(err).Panic("初始化数据库表结构异常") + log.WithError(err).Panic("初始化数据库表结构异常") } return db } diff --git a/server/api/session.go b/server/api/session.go index 1a8edaa..08adfa2 100644 --- a/server/api/session.go +++ b/server/api/session.go @@ -13,6 +13,7 @@ import ( "strings" "sync" + "next-terminal/pkg/log" "next-terminal/server/constant" "next-terminal/server/global" "next-terminal/server/model" @@ -20,7 +21,6 @@ import ( "github.com/labstack/echo/v4" "github.com/pkg/sftp" - "github.com/sirupsen/logrus" ) func SessionPagingEndpoint(c echo.Context) error { @@ -106,12 +106,12 @@ func CloseSessionById(sessionId string, code int, reason string) { defer mutex.Unlock() observable, _ := global.Store.Get(sessionId) if observable != nil { - logrus.Debugf("会话%v创建者退出,原因:%v", sessionId, reason) + log.Debugf("会话%v创建者退出,原因:%v", sessionId, reason) observable.Subject.Close(code, reason) for i := 0; i < len(observable.Observers); i++ { observable.Observers[i].Close(code, reason) - logrus.Debugf("强制踢出会话%v的观察者", sessionId) + log.Debugf("强制踢出会话%v的观察者", sessionId) } } global.Store.Del(sessionId) @@ -265,7 +265,7 @@ func SessionUploadEndpoint(c echo.Context) error { n, err := src.Read(buf) if err != nil { if err != io.EOF { - logrus.Warnf("文件上传错误 %v", err) + log.Warnf("文件上传错误 %v", err) } else { break } @@ -381,7 +381,7 @@ func SessionLsEndpoint(c echo.Context) error { if tun.Subject.NextTerminal.SftpClient == nil { sftpClient, err := sftp.NewClient(tun.Subject.NextTerminal.SshClient) if err != nil { - logrus.Errorf("创建sftp客户端失败:%v", err.Error()) + log.Errorf("创建sftp客户端失败:%v", err.Error()) return err } tun.Subject.NextTerminal.SftpClient = sftpClient @@ -450,7 +450,7 @@ func SessionLsEndpoint(c echo.Context) error { } func SafetyRuleTrigger(c echo.Context) { - logrus.Warnf("IP %v 尝试进行攻击,请ban掉此IP", c.RealIP()) + log.Warnf("IP %v 尝试进行攻击,请ban掉此IP", c.RealIP()) security := model.AccessSecurity{ ID: utils.UUID(), Source: "安全规则触发", @@ -612,6 +612,6 @@ func SessionRecordingEndpoint(c echo.Context) error { recording = session.Recording + "/recording" } - logrus.Debugf("读取录屏文件:%v,是否存在: %v, 是否为文件: %v", recording, utils.FileExists(recording), utils.IsFile(recording)) + log.Debugf("读取录屏文件:%v,是否存在: %v, 是否为文件: %v", recording, utils.FileExists(recording), utils.IsFile(recording)) return c.File(recording) } diff --git a/server/api/ssh.go b/server/api/ssh.go index 61de926..40957f7 100644 --- a/server/api/ssh.go +++ b/server/api/ssh.go @@ -7,16 +7,16 @@ import ( "strconv" "time" + "next-terminal/pkg/guacd" + "next-terminal/pkg/log" "next-terminal/server/constant" "next-terminal/server/global" - "next-terminal/server/guacd" "next-terminal/server/model" "next-terminal/server/term" "next-terminal/server/utils" "github.com/gorilla/websocket" "github.com/labstack/echo/v4" - "github.com/sirupsen/logrus" ) var UpGrader = websocket.Upgrader{ @@ -46,7 +46,7 @@ type WindowSize struct { func SSHEndpoint(c echo.Context) (err error) { ws, err := UpGrader.Upgrade(c.Response().Writer, c.Request(), nil) if err != nil { - logrus.Errorf("升级为WebSocket协议失败:%v", err.Error()) + log.Errorf("升级为WebSocket协议失败:%v", err.Error()) return err } @@ -109,7 +109,7 @@ func SSHEndpoint(c echo.Context) (err error) { observers := append(observable.Observers, tun) observable.Observers = observers global.Store.Set(sessionId, observable) - logrus.Debugf("加入会话%v,当前观察者数量为:%v", session.ConnectionId, len(observers)) + log.Debugf("加入会话%v,当前观察者数量为:%v", session.ConnectionId, len(observers)) } return err @@ -118,7 +118,7 @@ func SSHEndpoint(c echo.Context) (err error) { nextTerminal, err := term.NewNextTerminal(ip, port, username, password, privateKey, passphrase, rows, cols, recording) if err != nil { - logrus.Errorf("创建SSH客户端失败:%v", err.Error()) + log.Errorf("创建SSH客户端失败:%v", err.Error()) msg := Message{ Type: Closed, Content: err.Error(), @@ -144,7 +144,7 @@ func SSHEndpoint(c echo.Context) (err error) { Recording: recording, } // 创建新会话 - logrus.Debugf("创建新会话 %v", sess.ConnectionId) + log.Debugf("创建新会话 %v", sess.ConnectionId) if err := sessionRepository.UpdateById(&sess, sessionId); err != nil { return err } @@ -172,7 +172,7 @@ func SSHEndpoint(c echo.Context) (err error) { var msg Message err = json.Unmarshal(message, &msg) if err != nil { - logrus.Warnf("解析Json失败: %v, 原始字符串:%v", err, string(message)) + log.Warnf("解析Json失败: %v, 原始字符串:%v", err, string(message)) continue } @@ -181,17 +181,17 @@ func SSHEndpoint(c echo.Context) (err error) { var winSize WindowSize err = json.Unmarshal([]byte(msg.Content), &winSize) if err != nil { - logrus.Warnf("解析SSH会话窗口大小失败: %v", err) + log.Warnf("解析SSH会话窗口大小失败: %v", err) continue } if err := nextTerminal.WindowChange(winSize.Rows, winSize.Cols); err != nil { - logrus.Warnf("更改SSH会话窗口大小失败: %v", err) + log.Warnf("更改SSH会话窗口大小失败: %v", err) continue } case Data: _, err = nextTerminal.Write([]byte(msg.Content)) if err != nil { - logrus.Debugf("SSH会话写入失败: %v", err) + log.Debugf("SSH会话写入失败: %v", err) msg := Message{ Type: Closed, Content: "the remote connection is closed.", @@ -247,7 +247,7 @@ func WriteMessage(ws *websocket.Conn, msg Message) error { func WriteByteMessage(ws *websocket.Conn, p []byte) { err := ws.WriteMessage(websocket.TextMessage, p) if err != nil { - logrus.Debugf("write: %v", err) + log.Debugf("write: %v", err) } } diff --git a/server/api/ticker.go b/server/api/ticker.go index dc5b84b..d836792 100644 --- a/server/api/ticker.go +++ b/server/api/ticker.go @@ -4,9 +4,8 @@ import ( "strconv" "time" + "next-terminal/pkg/log" "next-terminal/server/constant" - - "github.com/sirupsen/logrus" ) func SetupTicker() { @@ -22,7 +21,7 @@ func SetupTicker() { if now.Sub(sessions[i].ConnectedTime.Time) > time.Hour*1 { _ = sessionRepository.DeleteById(sessions[i].ID) s := sessions[i].Username + "@" + sessions[i].IP + ":" + strconv.Itoa(sessions[i].Port) - logrus.Infof("会话「%v」ID「%v」超过1小时未打开,已删除。", s, sessions[i].ID) + log.Infof("会话「%v」ID「%v」超过1小时未打开,已删除。", s, sessions[i].ID) } } } @@ -56,7 +55,7 @@ func SetupTicker() { } err := sessionRepository.DeleteByIds(sessionIds) if err != nil { - logrus.Errorf("删除离线会话失败 %v", err) + log.Errorf("删除离线会话失败 %v", err) } } } diff --git a/server/api/tunnel.go b/server/api/tunnel.go index db8c46e..68199e8 100644 --- a/server/api/tunnel.go +++ b/server/api/tunnel.go @@ -5,14 +5,14 @@ import ( "path" "strconv" + "next-terminal/pkg/guacd" + "next-terminal/pkg/log" "next-terminal/server/constant" "next-terminal/server/global" - "next-terminal/server/guacd" "next-terminal/server/model" "github.com/gorilla/websocket" "github.com/labstack/echo/v4" - "github.com/sirupsen/logrus" ) const ( @@ -27,7 +27,7 @@ func TunEndpoint(c echo.Context) error { ws, err := UpGrader.Upgrade(c.Response().Writer, c.Request(), nil) if err != nil { - logrus.Errorf("升级为WebSocket协议失败:%v", err.Error()) + log.Errorf("升级为WebSocket协议失败:%v", err.Error()) return err } @@ -49,11 +49,11 @@ func TunEndpoint(c echo.Context) error { if len(connectionId) > 0 { session, err = sessionRepository.FindByConnectionId(connectionId) if err != nil { - logrus.Warnf("会话不存在") + log.Warnf("会话不存在") return err } if session.Status != constant.Connected { - logrus.Warnf("会话未在线") + log.Warnf("会话未在线") return errors.New("会话未在线") } configuration.ConnectionID = connectionId @@ -135,7 +135,7 @@ func TunEndpoint(c echo.Context) error { configuration.SetParameter(guacd.Backspace, propertyMap[guacd.Backspace]) configuration.SetParameter(guacd.TerminalType, propertyMap[guacd.TerminalType]) default: - logrus.WithField("configuration.Protocol", configuration.Protocol).Error("UnSupport Protocol") + log.WithField("configuration.Protocol", configuration.Protocol).Error("UnSupport Protocol") return Fail(c, 400, "不支持的协议") } @@ -165,7 +165,7 @@ func TunEndpoint(c echo.Context) error { if connectionId == "" { CloseSessionById(sessionId, NewTunnelError, err.Error()) } - logrus.Printf("建立连接失败: %v", err.Error()) + log.Printf("建立连接失败: %v", err.Error()) return err } @@ -194,7 +194,7 @@ func TunEndpoint(c echo.Context) error { Recording: configuration.GetParameter(guacd.RecordingPath), } // 创建新会话 - logrus.Debugf("创建新会话 %v", sess.ConnectionId) + log.Debugf("创建新会话 %v", sess.ConnectionId) if err := sessionRepository.UpdateById(&sess, sessionId); err != nil { return err } @@ -205,7 +205,7 @@ func TunEndpoint(c echo.Context) error { observers := append(observable.Observers, tun) observable.Observers = observers global.Store.Set(sessionId, observable) - logrus.Debugf("加入会话%v,当前观察者数量为:%v", session.ConnectionId, len(observers)) + log.Debugf("加入会话%v,当前观察者数量为:%v", session.ConnectionId, len(observers)) } } diff --git a/server/api/user.go b/server/api/user.go index ed51513..2fb2edb 100644 --- a/server/api/user.go +++ b/server/api/user.go @@ -4,12 +4,12 @@ import ( "strconv" "strings" + "next-terminal/pkg/log" "next-terminal/server/global" "next-terminal/server/model" "next-terminal/server/utils" "github.com/labstack/echo/v4" - "github.com/sirupsen/logrus" ) func UserCreateEndpoint(c echo.Context) error { @@ -97,7 +97,7 @@ func UserDeleteEndpoint(c echo.Context) error { for j := range loginLogs { global.Cache.Delete(loginLogs[j].ID) if err := userService.Logout(loginLogs[j].ID); err != nil { - logrus.WithError(err).WithField("id:", loginLogs[j].ID).Error("Cache Deleted Error") + log.WithError(err).WithField("id:", loginLogs[j].ID).Error("Cache Deleted Error") return Fail(c, 500, "强制下线错误") } } @@ -173,7 +173,7 @@ func ReloadToken() error { token := loginLog.ID user, err := userRepository.FindById(loginLog.UserId) if err != nil { - logrus.Debugf("用户「%v」获取失败,忽略", loginLog.UserId) + log.Debugf("用户「%v」获取失败,忽略", loginLog.UserId) continue } @@ -191,7 +191,7 @@ func ReloadToken() error { } else { global.Cache.Set(cacheKey, authorization, NotRememberEffectiveTime) } - logrus.Debugf("重新加载用户「%v」授权Token「%v」到缓存", user.Nickname, token) + log.Debugf("重新加载用户「%v」授权Token「%v」到缓存", user.Nickname, token) } return nil } diff --git a/server/constant/const.go b/server/constant/const.go index 0865990..2a2406e 100644 --- a/server/constant/const.go +++ b/server/constant/const.go @@ -1,6 +1,6 @@ package constant -import "next-terminal/server/guacd" +import "next-terminal/pkg/guacd" const ( AccessRuleAllow = "allow" // 允许访问 diff --git a/server/global/store.go b/server/global/store.go index faca1cc..4e8050b 100644 --- a/server/global/store.go +++ b/server/global/store.go @@ -4,7 +4,7 @@ import ( "strconv" "sync" - "next-terminal/server/guacd" + "next-terminal/pkg/guacd" "next-terminal/server/term" "github.com/gorilla/websocket" diff --git a/server/repository/property.go b/server/repository/property.go index de537ba..8e44641 100644 --- a/server/repository/property.go +++ b/server/repository/property.go @@ -1,7 +1,7 @@ package repository import ( - "next-terminal/server/guacd" + "next-terminal/pkg/guacd" "next-terminal/server/model" "gorm.io/gorm" diff --git a/server/service/job.go b/server/service/job.go index 03a5c4b..c8b4876 100644 --- a/server/service/job.go +++ b/server/service/job.go @@ -7,6 +7,7 @@ import ( "strings" "time" + "next-terminal/pkg/log" "next-terminal/server/constant" "next-terminal/server/global" "next-terminal/server/model" @@ -15,7 +16,6 @@ import ( "next-terminal/server/utils" "github.com/robfig/cron/v3" - "github.com/sirupsen/logrus" ) type JobService struct { @@ -43,14 +43,14 @@ func (r JobService) ChangeStatusById(id, status string) error { if err != nil { return err } - logrus.Debugf("开启计划任务「%v」,运行中计划任务数量「%v」", job.Name, len(global.Cron.Entries())) + log.Debugf("开启计划任务「%v」,运行中计划任务数量「%v」", job.Name, len(global.Cron.Entries())) jobForUpdate := model.Job{ID: id, Status: constant.JobStatusRunning, CronJobId: int(entryID)} return r.jobRepository.UpdateById(&jobForUpdate) } else { global.Cron.Remove(cron.EntryID(job.CronJobId)) - logrus.Debugf("关闭计划任务「%v」,运行中计划任务数量「%v」", job.Name, len(global.Cron.Entries())) + log.Debugf("关闭计划任务「%v」,运行中计划任务数量「%v」", job.Name, len(global.Cron.Entries())) jobForUpdate := model.Job{ID: id, Status: constant.JobStatusNotRunning} return r.jobRepository.UpdateById(&jobForUpdate) } @@ -102,7 +102,7 @@ func (r CheckAssetStatusJob) Run() { msg := fmt.Sprintf("资产「%v」存活状态检测完成,存活「%v」,耗时「%v」", asset.Name, active, elapsed) _ = r.jobService.assetRepository.UpdateActiveById(active, asset.ID) - logrus.Infof(msg) + log.Infof(msg) msgChan <- msg }() } @@ -154,7 +154,7 @@ func (r ShellJob) Run() { var metadataShell MetadataShell err := json.Unmarshal([]byte(r.Metadata), &metadataShell) if err != nil { - logrus.Errorf("JSON数据解析失败 %v", err) + log.Errorf("JSON数据解析失败 %v", err) return } @@ -200,10 +200,10 @@ func (r ShellJob) Run() { var msg string if err != nil { msg = fmt.Sprintf("资产「%v」Shell执行失败,返回值「%v」,耗时「%v」", asset.Name, err.Error(), elapsed) - logrus.Infof(msg) + log.Infof(msg) } else { msg = fmt.Sprintf("资产「%v」Shell执行成功,返回值「%v」,耗时「%v」", asset.Name, result, elapsed) - logrus.Infof(msg) + log.Infof(msg) } msgChan <- msg @@ -274,7 +274,7 @@ func (r JobService) InitJob() error { if err := r.jobRepository.Create(&job); err != nil { return err } - logrus.Debugf("创建计划任务「%v」cron「%v」", job.Name, job.Cron) + log.Debugf("创建计划任务「%v」cron「%v」", job.Name, job.Cron) } else { for i := range jobs { if jobs[i].Status == constant.JobStatusRunning { @@ -282,7 +282,7 @@ func (r JobService) InitJob() error { if err != nil { return err } - logrus.Debugf("启动计划任务「%v」cron「%v」", jobs[i].Name, jobs[i].Cron) + log.Debugf("启动计划任务「%v」cron「%v」", jobs[i].Name, jobs[i].Cron) } } } diff --git a/server/service/mail.go b/server/service/mail.go index 9f5ab4e..cb3aa3c 100644 --- a/server/service/mail.go +++ b/server/service/mail.go @@ -3,11 +3,11 @@ package service import ( "net/smtp" + "next-terminal/pkg/log" "next-terminal/server/constant" "next-terminal/server/repository" "github.com/jordan-wright/email" - "github.com/sirupsen/logrus" ) type MailService struct { @@ -26,7 +26,7 @@ func (r MailService) SendMail(to, subject, text string) { password := propertiesMap[constant.MailPassword] if host == "" || port == "" || username == "" || password == "" { - logrus.Debugf("邮箱信息不完整,跳过发送邮件。") + log.Debugf("邮箱信息不完整,跳过发送邮件。") return } @@ -37,6 +37,6 @@ func (r MailService) SendMail(to, subject, text string) { e.Text = []byte(text) err := e.Send(host+":"+port, smtp.PlainAuth("", username, password, host)) if err != nil { - logrus.Errorf("邮件发送失败: %v", err.Error()) + log.Errorf("邮件发送失败: %v", err.Error()) } } diff --git a/server/service/property.go b/server/service/property.go index bb3eab4..8894fb6 100644 --- a/server/service/property.go +++ b/server/service/property.go @@ -3,7 +3,7 @@ package service import ( "os" - "next-terminal/server/guacd" + "next-terminal/pkg/guacd" "next-terminal/server/model" "next-terminal/server/repository" "next-terminal/server/utils" diff --git a/server/service/user.go b/server/service/user.go index adbe55c..970a235 100644 --- a/server/service/user.go +++ b/server/service/user.go @@ -1,12 +1,11 @@ package service import ( + "next-terminal/pkg/log" "next-terminal/server/constant" "next-terminal/server/model" "next-terminal/server/repository" "next-terminal/server/utils" - - "github.com/sirupsen/logrus" ) type UserService struct { @@ -40,7 +39,7 @@ func (r UserService) InitUser() (err error) { if err := r.userRepository.Create(&user); err != nil { return err } - logrus.Infof("初始用户创建成功,账号:「%v」密码:「%v」", user.Username, initPassword) + log.Infof("初始用户创建成功,账号:「%v」密码:「%v」", user.Username, initPassword) } else { for i := range users { // 修正默认用户类型为管理员 @@ -52,7 +51,7 @@ func (r UserService) InitUser() (err error) { if err := r.userRepository.Update(&user); err != nil { return err } - logrus.Infof("自动修正用户「%v」ID「%v」类型为管理员", users[i].Nickname, users[i].ID) + log.Infof("自动修正用户「%v」ID「%v」类型为管理员", users[i].Nickname, users[i].ID) } } } @@ -83,7 +82,7 @@ func (r UserService) Logout(token string) (err error) { loginLog, err := r.loginLogRepository.FindById(token) if err != nil { - logrus.Warnf("登录日志「%v」获取失败", token) + log.Warnf("登录日志「%v」获取失败", token) return } diff --git a/server/term/test/test_ssh.go b/server/term/test/test_ssh.go index e714efa..533eb3e 100644 --- a/server/term/test/test_ssh.go +++ b/server/term/test/test_ssh.go @@ -6,7 +6,8 @@ import ( "os" "time" - "github.com/sirupsen/logrus" + "next-terminal/pkg/log" + "golang.org/x/crypto/ssh" "golang.org/x/crypto/ssh/terminal" ) @@ -30,7 +31,7 @@ func main() { client, err := ssh.Dial("tcp", "172.16.101.32:22", sshConfig) if err != nil { - logrus.Error(err) + log.Error(err) } defer client.Close() @@ -87,9 +88,9 @@ func (t *SSHTerminal) interactiveSession() error { defer func() { if t.exitMsg == "" { - logrus.Info(os.Stdout, "the connection was closed on the remote side on ", time.Now().Format(time.RFC822)) + log.Info(os.Stdout, "the connection was closed on the remote side on ", time.Now().Format(time.RFC822)) } else { - logrus.Info(os.Stdout, t.exitMsg) + log.Info(os.Stdout, t.exitMsg) } }()