Skip to content

Commit

Permalink
add io.Writer and StdLogger adaptors #7
Browse files Browse the repository at this point in the history
  • Loading branch information
umputun committed Mar 22, 2019
1 parent a7f793b commit 8ac8f79
Show file tree
Hide file tree
Showing 2 changed files with 85 additions and 0 deletions.
30 changes: 30 additions & 0 deletions adaptor.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package lgr

import (
"log"
"strings"
)

// Writer holds lgr.L and wraps with io.Writer interface
type Writer struct {
L
level string // if defined added to each message
}

// Write to lgr.L, trim EOL
func (w *Writer) Write(p []byte) (n int, err error) {
w.Logf(strings.TrimSuffix(w.level+string(p), "\n"))
return len(p), nil
}

// ToWriter makes io.Writer for given lgr.L with optional level
func ToWriter(l L, level string) *Writer {
if level != "" && !strings.HasSuffix(level, " ") {
level += " "
}
return &Writer{l, level}
}

func ToStdLogger(l L, level string) *log.Logger {
return log.New(ToWriter(l, level), "", 0)
}
55 changes: 55 additions & 0 deletions adaptor_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package lgr

import (
"bytes"
"testing"
"time"

"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)

func TestAdaptor_ToWriter(t *testing.T) {
rout, rerr := bytes.NewBuffer([]byte{}), bytes.NewBuffer([]byte{})
l := New(Out(rout), Err(rerr), Msec, LevelBraces)
l.now = func() time.Time { return time.Date(2018, 1, 7, 13, 2, 34, 0, time.Local) }

wr := ToWriter(l, "WARN")
sz, err := wr.Write([]byte("something blah 123"))
require.NoError(t, err)
assert.Equal(t, 18, sz)
assert.Equal(t, "2018/01/07 13:02:34.000 [WARN] something blah 123\n", rout.String())
}

func TestAdaptor_ToWriterNoLevel(t *testing.T) {
rout, rerr := bytes.NewBuffer([]byte{}), bytes.NewBuffer([]byte{})
l := New(Out(rout), Err(rerr), Msec, LevelBraces)
l.now = func() time.Time { return time.Date(2018, 1, 7, 13, 2, 34, 0, time.Local) }

wr := ToWriter(l, "")
sz, err := wr.Write([]byte("something blah 123"))
require.NoError(t, err)
assert.Equal(t, 18, sz)
assert.Equal(t, "2018/01/07 13:02:34.000 [INFO] something blah 123\n", rout.String())

rout.Reset()
rerr.Reset()
_, err = wr.Write([]byte("INFO something blah 123"))
require.NoError(t, err)
assert.Equal(t, "2018/01/07 13:02:34.000 [INFO] something blah 123\n", rout.String())
}

func TestAdaptor_ToStdLogger(t *testing.T) {
rout, rerr := bytes.NewBuffer([]byte{}), bytes.NewBuffer([]byte{})
l := New(Out(rout), Err(rerr), Msec, LevelBraces)
l.now = func() time.Time { return time.Date(2018, 1, 7, 13, 2, 34, 0, time.Local) }

wr := ToStdLogger(l, "WARN")
wr.Print("something")
assert.Equal(t, "2018/01/07 13:02:34.000 [WARN] something\n", rout.String())

rout.Reset()
rerr.Reset()
wr.Printf("xxx %s", "yyy")
assert.Equal(t, "2018/01/07 13:02:34.000 [WARN] xxx yyy\n", rout.String())
}

0 comments on commit 8ac8f79

Please sign in to comment.