Skip to content
Snippets Groups Projects
logger.go 1.11 KiB
Newer Older
package testutils

import (
	"os"
	"testing"

	"github.com/rs/zerolog"
)

// NewTestLogger creates a TestLogger.
func NewTestLogger(tb testing.TB) *TestLogger {
Axel Prel's avatar
Axel Prel committed
	tb.Helper()

	return &TestLogger{tb}
}

// TestLogger logs to a t.Log function.
type TestLogger struct {
	tb testing.TB
}

// Logger returns a zerolog Logger.
func (tl *TestLogger) Logger() zerolog.Logger {
	level := zerolog.DebugLevel
	if os.Getenv("TEST_TRACE") != "" {
		level = zerolog.TraceLevel
	}
	if os.Getenv("TEST_QUIET") != "" {
		level = zerolog.InfoLevel
	}
Axel Prel's avatar
Axel Prel committed

	return zerolog.New(zerolog.ConsoleWriter{Out: tl}).
		With().Timestamp().Logger().
		Level(level)
}

// Write writes the given string to t.Logf.
func (tl *TestLogger) Write(m []byte) (int, error) {
	tl.tb.Log(string(m))
Axel Prel's avatar
Axel Prel committed

	return len(m), nil
}

// SetTB changes the current TB, and returns a function to get back to the
func (tl *TestLogger) SetTB(tb testing.TB) func() {
Axel Prel's avatar
Axel Prel committed
	tb.Helper()
Axel Prel's avatar
Axel Prel committed

// GetLogger returns a test Logger.
func GetLogger(tb testing.TB) zerolog.Logger {
Axel Prel's avatar
Axel Prel committed
	tb.Helper()

	return NewTestLogger(tb).Logger()
}