func WrapWriterLogger(wr io.Writer) Sender {
	if s, ok := wr.(*WriterSender); ok {
		return s.Sender
	}
	s := &nativeLogger{
		Base: NewBase(""),
	}
	_ = s.SetFormatter(MakeDefaultFormatter())
	s.level = LevelInfo{level.Trace, level.Trace}
	s.reset = func() {
		s.logger = log.New(wr, fmt.Sprintf("[%s] ", s.Name()), log.LstdFlags)
		_ = s.SetErrorHandler(ErrorHandlerFromLogger(s.logger))
	}
	return s
}
WrapWriterLogger constructs a new unconfigured sender that directly
wraps any writer implementation. These loggers prepend time and
logger name information to the beginning of log lines.

As a special case, if the writer is a *WriterSender, then this
method will unwrap and return the underlying sender from the writer.
package send
import (
	"context"
	"fmt"
	"io"
	"log"
	"os"
	"github.com/mongodb/grip/level"
	"github.com/mongodb/grip/message"
)
type nativeLogger struct {
	logger *log.Logger
	*Base
}
func NewFileLogger(name, filePath string, l LevelInfo) (Sender, error) {
	s, err := MakeFileLogger(filePath)
	if err != nil {
		return nil, err
	}
	return setup(s, name, l)
}
func MakeFileLogger(filePath string) (Sender, error) {
	s := &nativeLogger{Base: NewBase("")}
	if err := s.SetFormatter(MakeDefaultFormatter()); err != nil {
		return nil, err
	}
	f, err := os.OpenFile(filePath, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
	if err != nil {
		return nil, fmt.Errorf("error opening logging file, %s", err.Error())
	}
	s.level = LevelInfo{level.Trace, level.Trace}
	s.reset = func() {
		prefix := fmt.Sprintf("[%s] ", s.Name())
		s.logger = log.New(f, prefix, log.LstdFlags)
		_ = s.SetErrorHandler(ErrorHandlerFromLogger(log.New(os.Stderr, prefix, log.LstdFlags)))
	}
	s.closer = func() error {
		return f.Close()
	}
	return s, nil
}
func NewNativeLogger(name string, l LevelInfo) (Sender, error) {
	return setup(MakeNative(), name, l)
}
func MakeNative() Sender {
	return WrapWriterLogger(os.Stdout)
}
func MakeErrorLogger() Sender {
	return WrapWriterLogger(os.Stderr)
}
func NewErrorLogger(name string, l LevelInfo) (Sender, error) {
	return setup(MakeErrorLogger(), name, l)
}