From 4eaa6700face2c2c02779649a148911cd8ffc5c8 Mon Sep 17 00:00:00 2001 From: Michael Schurter Date: Mon, 8 Jan 2018 12:53:58 -0800 Subject: [PATCH] Logger backed by *testing.T For capturing log output in tests and only displaying them on failure. Pulled out of #3241 --- helper/testlog/testlog.go | 40 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 helper/testlog/testlog.go diff --git a/helper/testlog/testlog.go b/helper/testlog/testlog.go new file mode 100644 index 000000000..1b18bc025 --- /dev/null +++ b/helper/testlog/testlog.go @@ -0,0 +1,40 @@ +// Package testlog creates a *log.Logger backed by testing.T to ease logging in +// tests. +package testlog + +import ( + "io" + "log" +) + +// Logger is the methods of testing.T (or testing.B) needed by the test +// logger. +type Logger interface { + Logf(format string, args ...interface{}) +} + +// writer implements io.Writer on top of a Logger. +type writer struct { + t Logger +} + +// Write to an underlying Logger. Never returns an error. +func (w *writer) Write(p []byte) (n int, err error) { + w.t.Logf(string(p)) + return len(p), nil +} + +// NewWriter creates a new io.Writer backed by a Logger. +func NewWriter(t Logger) io.Writer { + return &writer{t} +} + +// NewLog returns a new test logger. See https://golang.org/pkg/log/#New +func NewLog(t Logger, prefix string, flag int) *log.Logger { + return log.New(&writer{t}, prefix, flag) +} + +// New logger with "TEST" prefix and the Lmicroseconds flag. +func New(t Logger) *log.Logger { + return NewLog(t, "TEST ", log.Lmicroseconds) +}