github.com/cozy/cozy-stack@v0.0.0-20240603063001-31110fa4cae1/pkg/realtime/log_hook.go (about) 1 package realtime 2 3 import ( 4 "time" 5 6 "github.com/cozy/cozy-stack/pkg/prefixer" 7 "github.com/sirupsen/logrus" 8 ) 9 10 type log struct { 11 LogID string `json:"_id"` 12 Time time.Time `json:"time"` 13 Message string `json:"message"` 14 Level string `json:"level"` 15 Data map[string]interface{} `json:"data"` 16 17 docType string 18 } 19 20 func (l *log) DocType() string { return l.docType } 21 func (l *log) ID() string { return l.LogID } 22 func (l *log) Rev() string { return "" } 23 func (l *log) SetID(id string) { l.LogID = id } 24 func (l *log) SetRev(rev string) {} 25 26 type logHook struct { 27 Hub 28 db prefixer.Prefixer 29 docType string 30 docID string 31 } 32 33 // LogHook creates a hook that transmits logs through redis pubsub 34 // messaging. 35 func LogHook(db prefixer.Prefixer, hub Hub, parentDocType, documentID string) logrus.Hook { 36 return &logHook{ 37 Hub: hub, 38 db: db, 39 docType: parentDocType + ".logs", 40 docID: documentID, 41 } 42 } 43 44 func (r *logHook) Levels() []logrus.Level { 45 return logrus.AllLevels 46 } 47 48 func (r *logHook) Fire(entry *logrus.Entry) error { 49 doc := &log{ 50 LogID: r.docID, 51 Time: entry.Time, 52 Message: entry.Message, 53 Level: entry.Level.String(), 54 Data: entry.Data, 55 docType: r.docType, 56 } 57 r.Hub.Publish(r.db, EventCreate, doc, nil) 58 return nil 59 }