74 lines
1.7 KiB
Go
74 lines
1.7 KiB
Go
package output
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
"sync"
|
|
)
|
|
|
|
// NewLogger returns a Logger that will write to the given stdout/stderr writers.
|
|
// Disable the Logger to prevent it from writing to stdout in a TTY environment.
|
|
func NewLogger(stdout, stderr io.Writer, disabled bool) *Logger {
|
|
return &Logger{
|
|
out: stdout,
|
|
errout: stderr,
|
|
enabled: !disabled && isTTY(stdout),
|
|
}
|
|
}
|
|
|
|
// Logger writes to the given stdout/stderr writers.
|
|
// If not enabled, Print functions will noop but Error functions will continue
|
|
// to write to the stderr writer.
|
|
type Logger struct {
|
|
mu sync.Mutex // guards the writers
|
|
out io.Writer
|
|
errout io.Writer
|
|
enabled bool
|
|
}
|
|
|
|
// Print writes the arguments to the stdout writer.
|
|
func (l *Logger) Print(v ...interface{}) (int, error) {
|
|
if !l.enabled {
|
|
return 0, nil
|
|
}
|
|
|
|
l.mu.Lock()
|
|
defer l.mu.Unlock()
|
|
return fmt.Fprint(l.out, v...)
|
|
}
|
|
|
|
// Println writes the arguments to the stdout writer with a newline at the end.
|
|
func (l *Logger) Println(v ...interface{}) (int, error) {
|
|
if !l.enabled {
|
|
return 0, nil
|
|
}
|
|
|
|
l.mu.Lock()
|
|
defer l.mu.Unlock()
|
|
return fmt.Fprintln(l.out, v...)
|
|
}
|
|
|
|
// Printf writes the formatted arguments to the stdout writer.
|
|
func (l *Logger) Printf(f string, v ...interface{}) (int, error) {
|
|
if !l.enabled {
|
|
return 0, nil
|
|
}
|
|
|
|
l.mu.Lock()
|
|
defer l.mu.Unlock()
|
|
return fmt.Fprintf(l.out, f, v...)
|
|
}
|
|
|
|
// Errorf writes the formatted arguments to the stderr writer.
|
|
func (l *Logger) Errorf(f string, v ...interface{}) (int, error) {
|
|
l.mu.Lock()
|
|
defer l.mu.Unlock()
|
|
return fmt.Fprintf(l.errout, f, v...)
|
|
}
|
|
|
|
// Errorln writes the arguments to the stderr writer with a newline at the end.
|
|
func (l *Logger) Errorln(v ...interface{}) (int, error) {
|
|
l.mu.Lock()
|
|
defer l.mu.Unlock()
|
|
return fmt.Fprintln(l.errout, v...)
|
|
}
|