From f5d7f54a55ec60bcf5ad2c951316cfcdde5f1616 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E8=8C=B6=E6=B8=85=E6=AC=A2?= Date: Fri, 25 Apr 2025 18:34:24 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81ws=E6=97=A5=E5=BF=97=E5=AE=9E?= =?UTF-8?q?=E7=8E=B0,=20=E5=BE=85=E7=B2=BE=E7=BB=86=E5=8C=96=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E6=8E=A7=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- instance/ws_log.go | 120 +++++++++++++++++++++++++++++++++++++++++++++ logger.go | 31 ++++-------- 2 files changed, 130 insertions(+), 21 deletions(-) create mode 100644 instance/ws_log.go diff --git a/instance/ws_log.go b/instance/ws_log.go new file mode 100644 index 0000000..9404e2d --- /dev/null +++ b/instance/ws_log.go @@ -0,0 +1,120 @@ +// Package instance ... +// +// Description : instance ... +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 2025-04-25 18:16 +package instance + +import ( + "git.zhangdeman.cn/zhangdeman/websocket" + "git.zhangdeman.cn/zhangdeman/websocket/abstract" + "git.zhangdeman.cn/zhangdeman/websocket/config" + "git.zhangdeman.cn/zhangdeman/websocket/context" + "git.zhangdeman.cn/zhangdeman/websocket/storage" + "github.com/gin-gonic/gin" + "io" +) + +// NewWebsocketLog 初始化长连接日志 +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 18:12 2024/7/22 +func NewWebsocketLog(serverPort int, route *gin.Engine) (*WsLog, error) { + wsLog := &WsLog{} + if err := websocket.NewWebsocketServeWithGinRouter(serverPort, route, wsLog); nil != err { + return nil, err + } + wsServer, _ := websocket.GetWsServer(serverPort, wsLog.GetModuleFlag()) + // logger.SetWsLoggerConnect(wsServer.GetConfig().ConnectionManager) + return &WsLog{ + port: serverPort, + connectManager: wsServer.GetConfig().ConnectionManager, + }, nil +} + +// CloseWebsocketLog ... +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 13:27 2024/7/25 +func CloseWebsocketLog(wsLog *WsLog) { + if nil == wsLog { + return + } + wsServer, _ := websocket.GetWsServer(wsLog.port, wsLog.GetModuleFlag()) + allConnect := wsServer.GetConfig().ConnectionManager.GetCtxList() + for _, conn := range allConnect { + _ = conn.Session.Close() + } +} + +type WsLog struct { + port int + connectManager storage.IConnection +} + +func (e WsLog) Connect(ctx *context.WSContext) error { + return nil +} + +func (e WsLog) Disconnect(ctx *context.WSContext) { +} + +func (e WsLog) Close(ctx *context.WSContext, code int, message string) error { + return nil +} + +func (e WsLog) HandshakeURL() []string { + return []string{ + "/system/logger/trace", + } +} + +func (e WsLog) GetCommandList() []abstract.ICommand { + return []abstract.ICommand{} +} + +func (e WsLog) GetModuleFlag() string { + return "ws-log" +} + +func (e WsLog) GetServerPort() int { + return e.port +} + +func (e WsLog) GetWSServerConfig() []config.SetWSServerConfig { + return []config.SetWSServerConfig{ + config.SetPingPeriod(5), + config.SetPongWait(60), + config.SetWriteWait(60), + config.SetMaxMessageBufferSize(81920), + config.SetMaxMessageSize(81920), + } +} + +func (e WsLog) Writer() io.Writer { + return &wsWriter{ + connectionManager: e.connectManager, + } +} + +type wsWriter struct { + connectionManager storage.IConnection +} + +// Write ws的writer +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 22:24 2024/7/22 +func (w *wsWriter) Write(p []byte) (n int, err error) { + p = []byte(" " + string(p)) + allConnList := w.connectionManager.GetCtxList() + for _, conn := range allConnList { + _ = conn.Session.Write(p) + } + return 0, nil +} diff --git a/logger.go b/logger.go index 1de6473..cbefa13 100644 --- a/logger.go +++ b/logger.go @@ -9,6 +9,7 @@ package logger import ( "git.zhangdeman.cn/zhangdeman/consts" + "git.zhangdeman.cn/zhangdeman/logger/instance" "io" "os" @@ -60,7 +61,15 @@ func NewLogger(inputLoggerLevel consts.LogLevel, splitConfig *RotateLogConfig, o fileHandlerList := []zapcore.Core{ zapcore.NewCore(o.Encoder, zapcore.AddSync(loggerWriter), loggerLevelDeal), - zapcore.NewCore(o.Encoder, zapcore.AddSync(&wsWriter{}), loggerLevelDeal), // 设置ws日志输出 + // zapcore.NewCore(o.Encoder, zapcore.AddSync(&wsWriter{}), loggerLevelDeal), // 设置ws日志输出 + } + + // TODO: 通过配置控制ws logger + if wsLoggerInstance, err := instance.NewWebsocketLog(80, nil); nil != err { + return nil, err + } else { + // 设置ws日志输出 + fileHandlerList = append(fileHandlerList, zapcore.NewCore(o.Encoder, zapcore.AddSync(wsLoggerInstance.Writer()), loggerLevelDeal)) } // 设置控制台输出 @@ -138,23 +147,3 @@ func (l *Logger) getWriter() (io.Writer, error) { return hook, nil } - -type wsWriter struct { -} - -// Write ws的writer -// -// Author : go_developer@163.com<白茶清欢> -// -// Date : 22:24 2024/7/22 -func (w *wsWriter) Write(p []byte) (n int, err error) { - if nil == wsLoggerConnect { - return 0, nil - } - p = []byte(" " + string(p)) - allConnList := wsLoggerConnect.GetCtxList() - for _, conn := range allConnList { - _ = conn.Session.Write(p) - } - return 0, nil -}