github.com/mongodb/grip@v0.0.0-20240213223901-f906268d82b9/slogger/appender_sender.go (about) 1 package slogger 2 3 import ( 4 "context" 5 "fmt" 6 "os" 7 8 "github.com/mongodb/grip/level" 9 "github.com/mongodb/grip/message" 10 "github.com/mongodb/grip/send" 11 ) 12 13 /////////////////////////////////////////////////////////////////////////// 14 // 15 // A shim between slogger.Append and send.Sender 16 // 17 /////////////////////////////////////////////////////////////////////////// 18 19 type appenderSender struct { 20 appender Appender 21 name string 22 level send.LevelInfo 23 } 24 25 // NewAppenderSender implements the send.Sender interface, which 26 // allows it to be used as a grip backend, but the it's mode of action 27 // is to use a slogger.Appender. This allows using the grip package, 28 // either via the slogger interface or the normal grip Jouernaler 29 // interface, while continuing to use existing slogger code. 30 func NewAppenderSender(name string, a Appender) send.Sender { 31 return &appenderSender{ 32 appender: a, 33 name: name, 34 level: send.LevelInfo{Default: level.Debug, Threshold: level.Debug}, 35 } 36 } 37 38 // WrapAppender takes an Appender instance and returns a send.Sender 39 // instance that wraps it. The name defaults to the name of the 40 // process (argc). 41 func WrapAppender(a Appender) send.Sender { 42 return &appenderSender{ 43 appender: a, 44 name: os.Args[0], 45 level: send.LevelInfo{Default: level.Debug, Threshold: level.Debug}, 46 } 47 } 48 49 // TODO: we may want to add a mutex here 50 func (a *appenderSender) Close() error { return nil } 51 func (a *appenderSender) Name() string { return a.name } 52 func (a *appenderSender) SetName(n string) { a.name = n } 53 func (a *appenderSender) Level() send.LevelInfo { return a.level } 54 func (a *appenderSender) SetErrorHandler(send.ErrorHandler) error { return nil } 55 func (a *appenderSender) ErrorHandler() send.ErrorHandler { return nil } 56 func (a *appenderSender) SetFormatter(send.MessageFormatter) error { return nil } 57 func (a *appenderSender) Formatter() send.MessageFormatter { return nil } 58 func (a *appenderSender) SetLevel(l send.LevelInfo) error { 59 if !l.Valid() { 60 return fmt.Errorf("level settings are not valid: %+v", l) 61 } 62 63 a.level = l 64 return nil 65 } 66 67 func (a *appenderSender) Send(m message.Composer) { 68 if a.Level().ShouldLog(m) { 69 log, ok := m.(*Log) 70 if ok { 71 _ = a.appender.Append(log) 72 } else { 73 _ = a.appender.Append(NewLog(m)) 74 } 75 } 76 } 77 78 func (a *appenderSender) Flush(_ context.Context) error { return nil }