From c8d4d3b0fe55b39791544fdc890ae920d1926b3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E4=BC=9F=E4=B9=90?= Date: Fri, 3 Mar 2023 14:58:47 +0800 Subject: [PATCH] x --- log/mq/nsq.go | 79 ++++++++++++++++++++++++++++++++++++++++++++ proto/v1/user.gin.go | 1 + 2 files changed, 80 insertions(+) create mode 100644 log/mq/nsq.go diff --git a/log/mq/nsq.go b/log/mq/nsq.go new file mode 100644 index 0000000..a80ad07 --- /dev/null +++ b/log/mq/nsq.go @@ -0,0 +1,79 @@ +package mq + +import ( + "encoding/json" + "fmt" + "git.diulo.com/mogfee/protoc-gen-kit/log" + "github.com/nsqio/go-nsq" + "sync" + "sync/atomic" +) + +type nsqLogger struct { + topic string + host string + list chan []byte + wg sync.WaitGroup + stop atomic.Bool +} + +func (s *nsqLogger) Run(client *nsq.Producer) { + s.wg.Add(1) + defer s.wg.Done() + for { + if s.stop.Load() { + break + } + for v := range s.list { + if err := client.Publish(s.topic, v); err != nil { + fmt.Println(err) + continue + } + } + } +} +func (s *nsqLogger) Shutdown() error { + if s.stop.Load() { + return nil + } + s.stop.Store(true) + s.wg.Wait() + return nil +} +func NewNsqLogger(host string, topic string) log.Logger { + client, err := nsq.NewProducer(host, nsq.NewConfig()) + if err != nil { + panic(err) + } + + std := &nsqLogger{ + topic: topic, + host: host, + list: make(chan []byte, 1000), + wg: sync.WaitGroup{}, + } + go std.Run(client) + return std + +} + +func (l *nsqLogger) Log(level log.Level, keyvals ...any) error { + if l.stop.Load() { + fmt.Println("log is stop") + return nil + } + if len(keyvals) == 0 { + return nil + } + if len(keyvals)&1 == 1 { + keyvals = append(keyvals, "KEYVALS UNPAIRED") + } + buf := make(map[any]any) + buf["status"] = level.String() + for i := 0; i < len(keyvals); i += 2 { + buf[keyvals[i]] = keyvals[i+1] + } + body, _ := json.Marshal(buf) + l.list <- body + return nil +} diff --git a/proto/v1/user.gin.go b/proto/v1/user.gin.go index fab39c4..e426649 100644 --- a/proto/v1/user.gin.go +++ b/proto/v1/user.gin.go @@ -3,6 +3,7 @@ package user import ( "context" "git.diulo.com/mogfee/protoc-gen-kit/middleware" + "git.diulo.com/mogfee/protoc-gen-kit/pkg/response" "git.diulo.com/mogfee/protoc-gen-kit/pkg/xerrors" "github.com/gin-gonic/gin" )