github.com/hspak/nomad@v0.7.2-0.20180309000617-bc4ae22a39a5/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  )
    10  
    11  // LogPrinter is the methods of testing.T (or testing.B) needed by the test
    12  // logger.
    13  type LogPrinter interface {
    14  	Logf(format string, args ...interface{})
    15  }
    16  
    17  // writer implements io.Writer on top of a Logger.
    18  type writer struct {
    19  	t LogPrinter
    20  }
    21  
    22  // Write to an underlying Logger. Never returns an error.
    23  func (w *writer) Write(p []byte) (n int, err error) {
    24  	w.t.Logf(string(p))
    25  	return len(p), nil
    26  }
    27  
    28  // NewWriter creates a new io.Writer backed by a Logger.
    29  func NewWriter(t LogPrinter) io.Writer {
    30  	return &writer{t}
    31  }
    32  
    33  // New returns a new test logger. See https://golang.org/pkg/log/#New
    34  func New(t LogPrinter, prefix string, flag int) *log.Logger {
    35  	return log.New(&writer{t}, prefix, flag)
    36  }
    37  
    38  // WithPrefix returns a new test logger with the Lmicroseconds flag set.
    39  func WithPrefix(t LogPrinter, prefix string) *log.Logger {
    40  	return New(t, prefix, log.Lmicroseconds)
    41  }
    42  
    43  // NewLog logger with "TEST" prefix and the Lmicroseconds flag.
    44  func Logger(t LogPrinter) *log.Logger {
    45  	return WithPrefix(t, "")
    46  }