|
|
- package log
-
- import (
- "testing"
-
- "github.com/rs/zerolog"
- )
-
- // TestingLogger was a legacy constructor that wrote logging output to
- // standardoutput when in verbose mode, and no-op'ed test logs
- // otherwise. Now it always no-ops, but if you need to see logs from
- // tests, you can replace this call with `NewTestingLogger`
- // constructor.
- func TestingLogger() Logger {
- return NewNopLogger()
- }
-
- type testingWriter struct {
- t testing.TB
- }
-
- func (tw testingWriter) Write(in []byte) (int, error) {
- tw.t.Log(string(in))
- return len(in), nil
- }
-
- // NewTestingLogger converts a testing.T into a logging interface to
- // make test failures and verbose provide better feedback associated
- // with test failures. This logging instance is safe for use from
- // multiple threads, but in general you should create one of these
- // loggers ONCE for each *testing.T instance that you interact with.
- //
- // By default it collects only ERROR messages, or DEBUG messages in
- // verbose mode, and relies on the underlying behavior of
- // testing.T.Log()
- //
- // Users should be careful to ensure that no calls to this logger are
- // made in goroutines that are running after (which, by the rules of
- // testing.TB will panic.)
- func NewTestingLogger(t testing.TB) Logger {
- level := LogLevelError
- if testing.Verbose() {
- level = LogLevelDebug
- }
-
- return NewTestingLoggerWithLevel(t, level)
- }
-
- // NewTestingLoggerWithLevel creates a testing logger instance at a
- // specific level that wraps the behavior of testing.T.Log().
- func NewTestingLoggerWithLevel(t testing.TB, level string) Logger {
- logLevel, err := zerolog.ParseLevel(level)
- if err != nil {
- t.Fatalf("failed to parse log level (%s): %v", level, err)
- }
-
- return defaultLogger{
- Logger: zerolog.New(newSyncWriter(testingWriter{t})).Level(logLevel),
- }
- }
|