func CreateTestLogger(t *testing.T, levels ...logr.Level) (logger logr.Logger, shutdown func() error) {
	lgr, _ := logr.New()
	filter := logr.NewCustomFilter(levels...)
	formatter := &formatters.Plain{EnableCaller: true}
	target := NewTestingTarget(t)
	if err := lgr.AddTarget(target, "test", filter, formatter, 1000); err != nil {
		t.Fail()
	}
	shutdown = func() error {
		err := lgr.Shutdown()
		if err != nil {
			target.mux.Lock()
			target.t.Error("error shutting down test logger", err)
			target.mux.Unlock()
		}
		return err
	}
	return lgr.NewLogger(), shutdown
}
CreateTestLogger creates a logger for unit tests. Log records are output to `(*testing.T).Log`.
A new logger is returned along with a method to shutdown the new logger.
package targets
import (
	"strings"
	"sync"
	"testing"
	"github.com/mattermost/logr/v2"
	"github.com/mattermost/logr/v2/formatters"
)
type Testing struct {
	mux sync.Mutex
	t   *testing.T
}
func NewTestingTarget(t *testing.T) *Testing {
	return &Testing{
		t: t,
	}
}
func (tt *Testing) Init() error {
	return nil
}
func (tt *Testing) Write(p []byte, rec *logr.LogRec) (int, error) {
	tt.mux.Lock()
	defer tt.mux.Unlock()
	if tt.t != nil {
		s := strings.TrimSpace(string(p))
		tt.t.Log(s)
	}
	return len(p), nil
}
func (tt *Testing) Shutdown() error {
	tt.mux.Lock()
	defer tt.mux.Unlock()
	tt.t = nil
	return nil
}