Skip to content

Commit

Permalink
Add WriterLevel() function to the logger
Browse files Browse the repository at this point in the history
This commit adds a variant of the logger's Writer() function that
accepts a log level. When the variant is used, any messages written to
the returned pipe will be written with the provided level. The original
Writer() function uses the logger's Print() method as it always has.
  • Loading branch information
Damien Radtke authored and aybabtme committed Apr 16, 2016
1 parent 870c1fc commit 1d1fd2d
Showing 1 changed file with 25 additions and 3 deletions.
28 changes: 25 additions & 3 deletions writer.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,18 +7,40 @@ import (
)

func (logger *Logger) Writer() *io.PipeWriter {
return logger.WriterLevel(255)
}

func (logger *Logger) WriterLevel(level Level) *io.PipeWriter {
reader, writer := io.Pipe()

go logger.writerScanner(reader)
var printFunc func(args ...interface{})
switch level {
case DebugLevel:
printFunc = logger.Debug
case InfoLevel:
printFunc = logger.Info
case WarnLevel:
printFunc = logger.Warn
case ErrorLevel:
printFunc = logger.Error
case FatalLevel:
printFunc = logger.Fatal
case PanicLevel:
printFunc = logger.Panic
default:
printFunc = logger.Print
}

go logger.writerScanner(reader, printFunc)
runtime.SetFinalizer(writer, writerFinalizer)

return writer
}

func (logger *Logger) writerScanner(reader *io.PipeReader) {
func (logger *Logger) writerScanner(reader *io.PipeReader, printFunc func(args ...interface{})) {
scanner := bufio.NewScanner(reader)
for scanner.Scan() {
logger.Print(scanner.Text())
printFunc(scanner.Text())
}
if err := scanner.Err(); err != nil {
logger.Errorf("Error while reading from Writer: %s", err)
Expand Down

0 comments on commit 1d1fd2d

Please sign in to comment.