支持ws日志实现, 待精细化配置控制
This commit is contained in:
parent
688d6b7446
commit
f5d7f54a55
120
instance/ws_log.go
Normal file
120
instance/ws_log.go
Normal file
@ -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
|
||||||
|
}
|
31
logger.go
31
logger.go
@ -9,6 +9,7 @@ package logger
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"git.zhangdeman.cn/zhangdeman/consts"
|
"git.zhangdeman.cn/zhangdeman/consts"
|
||||||
|
"git.zhangdeman.cn/zhangdeman/logger/instance"
|
||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
@ -60,7 +61,15 @@ func NewLogger(inputLoggerLevel consts.LogLevel, splitConfig *RotateLogConfig, o
|
|||||||
|
|
||||||
fileHandlerList := []zapcore.Core{
|
fileHandlerList := []zapcore.Core{
|
||||||
zapcore.NewCore(o.Encoder, zapcore.AddSync(loggerWriter), loggerLevelDeal),
|
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
|
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
|
|
||||||
}
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user