github.com/djenriquez/nomad-1@v0.8.1/helper/testlog/testlog.go (about) 1 // Package testlog creates a *log.Logger backed by *testing.T to ease logging 2 // in tests. This allows logs from components being tested to only be printed 3 // if the test fails (or the verbose flag is specified). 4 package testlog 5 6 import ( 7 "io" 8 "log" 9 "os" 10 ) 11 12 // UseStdout returns true if NOMAD_TEST_STDOUT=1 and sends logs to stdout. 13 func UseStdout() bool { 14 return os.Getenv("NOMAD_TEST_STDOUT") == "1" 15 } 16 17 // LogPrinter is the methods of testing.T (or testing.B) needed by the test 18 // logger. 19 type LogPrinter interface { 20 Logf(format string, args ...interface{}) 21 } 22 23 // writer implements io.Writer on top of a Logger. 24 type writer struct { 25 t LogPrinter 26 } 27 28 // Write to an underlying Logger. Never returns an error. 29 func (w *writer) Write(p []byte) (n int, err error) { 30 w.t.Logf(string(p)) 31 return len(p), nil 32 } 33 34 // NewWriter creates a new io.Writer backed by a Logger. 35 func NewWriter(t LogPrinter) io.Writer { 36 if UseStdout() { 37 return os.Stdout 38 } 39 return &writer{t} 40 } 41 42 // New returns a new test logger. See https://golang.org/pkg/log/#New 43 func New(t LogPrinter, prefix string, flag int) *log.Logger { 44 if UseStdout() { 45 return log.New(os.Stdout, prefix, flag) 46 } 47 return log.New(&writer{t}, prefix, flag) 48 } 49 50 // WithPrefix returns a new test logger with the Lmicroseconds flag set. 51 func WithPrefix(t LogPrinter, prefix string) *log.Logger { 52 return New(t, prefix, log.Lmicroseconds) 53 } 54 55 // NewLog logger with "TEST" prefix and the Lmicroseconds flag. 56 func Logger(t LogPrinter) *log.Logger { 57 return WithPrefix(t, "") 58 }