Skip to content

Commit

Permalink
feat(log): Helper implemented io.Writer (#1927)
Browse files Browse the repository at this point in the history
* feat(log): Add writerWrapper implementing io.Writer

* fix(kratos): fix format has wrong type

* fix(log): rename writerOption to WriterOptionFn.
  • Loading branch information
elricli authored May 6, 2022
1 parent 245f55d commit eb2dcae
Show file tree
Hide file tree
Showing 3 changed files with 96 additions and 1 deletion.
43 changes: 43 additions & 0 deletions log/helper_writer.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package log

import "io"

type writerWrapper struct {
helper *Helper
level Level
}

type WriterOptionFn func(w *writerWrapper)

// WithWriteLevel set writerWrapper level.
func WithWriterLevel(level Level) WriterOptionFn {
return func(w *writerWrapper) {
w.level = level
}
}

// WithWriteMessageKey set writerWrapper helper message key.
func WithWriteMessageKey(key string) WriterOptionFn {
return func(w *writerWrapper) {
if key != "" {
w.helper.msgKey = key
}
}
}

// NewWriter return a writer wrapper.
func NewWriter(logger Logger, opts ...WriterOptionFn) io.Writer {
ww := &writerWrapper{
helper: NewHelper(logger, WithMessageKey(DefaultMessageKey)),
level: LevelInfo, // default level
}
for _, opt := range opts {
opt(ww)
}
return ww
}

func (ww *writerWrapper) Write(p []byte) (int, error) {
ww.helper.Log(ww.level, ww.helper.msgKey, string(p))
return 0, nil
}
52 changes: 52 additions & 0 deletions log/helper_writer_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package log

import (
"bytes"
"io"
"strings"
"testing"
)

func TestWriterWrapper(t *testing.T) {
var buf bytes.Buffer
logger := NewStdLogger(&buf)
content := "ThisIsSomeTestLogMessage"
testCases := []struct {
w io.Writer
acceptLevel Level
acceptMessageKey string
}{
{
w: NewWriter(logger),
acceptLevel: LevelInfo, // default level
acceptMessageKey: DefaultMessageKey,
},
{
w: NewWriter(logger, WithWriterLevel(LevelDebug)),
acceptLevel: LevelDebug,
acceptMessageKey: DefaultMessageKey,
},
{
w: NewWriter(logger, WithWriteMessageKey("XxXxX")),
acceptLevel: LevelInfo, // default level
acceptMessageKey: "XxXxX",
},
{
w: NewWriter(logger, WithWriterLevel(LevelError), WithWriteMessageKey("XxXxX")),
acceptLevel: LevelError,
acceptMessageKey: "XxXxX",
},
}
for _, tc := range testCases {
_, err := tc.w.Write([]byte(content))
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if !strings.Contains(buf.String(), tc.acceptLevel.String()) {
t.Errorf("expected level: %s, got: %s", tc.acceptLevel, buf.String())
}
if !strings.Contains(buf.String(), tc.acceptMessageKey) {
t.Errorf("expected message key: %s, got: %s", tc.acceptMessageKey, buf.String())
}
}
}
2 changes: 1 addition & 1 deletion options_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ func TestLogger(t *testing.T) {
v := xlog.NewStdLogger(log.Writer())
Logger(v)(o)
if !reflect.DeepEqual(xlog.NewHelper(v), o.logger) {
t.Fatalf("o.logger:%s is not equal to xlog.NewHelper(v):%s", o.logger, xlog.NewHelper(v))
t.Fatalf("o.logger:%v is not equal to xlog.NewHelper(v):%v", o.logger, xlog.NewHelper(v))
}
}

Expand Down

0 comments on commit eb2dcae

Please sign in to comment.