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 }