diff --git a/adaptor.go b/adaptor.go new file mode 100644 index 0000000..3c213c2 --- /dev/null +++ b/adaptor.go @@ -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) +} diff --git a/adaptor_test.go b/adaptor_test.go new file mode 100644 index 0000000..6470ed5 --- /dev/null +++ b/adaptor_test.go @@ -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()) +}