From dd9ca58d52519a3e5aabd7336dc956e719b12d63 Mon Sep 17 00:00:00 2001 From: "kayos@tcp.direct" Date: Sun, 19 May 2024 20:26:32 -0700 Subject: [PATCH] Feat: introduce `google.golang.org/grpc/grpclog.LoggerV2` compatibility --- compat.go | 39 +++++++++++++++++++++++++++++++++++++++ go.mod | 8 +++++++- go.sum | 3 ++- util.go | 12 ++++++++++++ wrap.go | 47 ++++++++++++++++++----------------------------- wrap_test.go | 6 ++++++ 6 files changed, 84 insertions(+), 31 deletions(-) create mode 100644 compat.go create mode 100644 util.go diff --git a/compat.go b/compat.go new file mode 100644 index 0000000..b97dcde --- /dev/null +++ b/compat.go @@ -0,0 +1,39 @@ +package zwrap + +// StdCompatLogger is an interface that provides compatibility with the standard library's log.Logger. +type StdCompatLogger interface { + Fatal(v ...interface{}) + Fatalf(format string, v ...interface{}) + Fatalln(v ...interface{}) + Panic(v ...interface{}) + Panicf(format string, v ...interface{}) + Panicln(v ...interface{}) + Prefix() string + Print(v ...interface{}) + Printf(format string, v ...interface{}) + Println(v ...interface{}) + SetPrefix(prefix string) + Output(calldepth int, s string) error +} + +type GRPCCompatLogger interface { + Info(args ...any) + Infoln(args ...any) + Infof(format string, args ...any) + Warning(args ...any) + Warningln(args ...any) + Warningf(format string, args ...any) + Error(args ...any) + Errorln(args ...any) + Errorf(format string, args ...any) + Fatal(args ...any) + Fatalln(args ...any) + Fatalf(format string, args ...any) + V(l int) bool +} + +// assert that Logger implements StdCompatLogger and GRPCCompatLogger. +var ( + _ StdCompatLogger = &Logger{} + _ GRPCCompatLogger = &Logger{} +) diff --git a/go.mod b/go.mod index 7b41eca..82f47bf 100644 --- a/go.mod +++ b/go.mod @@ -1,5 +1,11 @@ module git.tcp.direct/kayos/zwrap -go 1.14 +go 1.18 require github.com/rs/zerolog v1.30.0 + +require ( + github.com/mattn/go-colorable v0.1.12 // indirect + github.com/mattn/go-isatty v0.0.14 // indirect + golang.org/x/sys v0.18.0 // indirect +) diff --git a/go.sum b/go.sum index e0d9b58..b05abda 100644 --- a/go.sum +++ b/go.sum @@ -9,5 +9,6 @@ github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= github.com/rs/zerolog v1.30.0 h1:SymVODrcRsaRaSInD9yQtKbtWqwsfoPcRff/oRXLj4c= github.com/rs/zerolog v1.30.0/go.mod h1:/tk+P47gFdPXq4QYjvCmT5/Gsug2nagsFWBWhAiSi1w= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6 h1:foEbQz/B0Oz6YIqu/69kfXPYeFQAuuMYFkjaqXzl5Wo= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= +golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= diff --git a/util.go b/util.go new file mode 100644 index 0000000..07435da --- /dev/null +++ b/util.go @@ -0,0 +1,12 @@ +package zwrap + +import ( + "strings" + "sync" +) + +var strBufs = &sync.Pool{ + New: func() interface{} { + return new(strings.Builder) + }, +} diff --git a/wrap.go b/wrap.go index 242c327..e8a7fd8 100644 --- a/wrap.go +++ b/wrap.go @@ -5,41 +5,12 @@ package zwrap import ( "bytes" "fmt" - "log" "strings" "sync" "github.com/rs/zerolog" ) -var strBufs = &sync.Pool{ - New: func() interface{} { - return new(strings.Builder) - }, -} - -// StdCompatLogger is an interface that provides compatibility with the standard library's log.Logger. -type StdCompatLogger interface { - Fatal(v ...interface{}) - Fatalf(format string, v ...interface{}) - Fatalln(v ...interface{}) - Panic(v ...interface{}) - Panicf(format string, v ...interface{}) - Panicln(v ...interface{}) - Prefix() string - Print(v ...interface{}) - Printf(format string, v ...interface{}) - Println(v ...interface{}) - SetPrefix(prefix string) - Output(calldepth int, s string) error -} - -// assert that Logger implements StdCompatLogger and that log.Logger implements StdCompatLogger -var _ StdCompatLogger = &Logger{} -var _ StdCompatLogger = &log.Logger{} - -// ---------------------------------------------------- - type Logger struct { *zerolog.Logger *sync.RWMutex @@ -48,6 +19,24 @@ type Logger struct { printLevel zerolog.Level } +func (l *Logger) Warning(args ...any) { + l.Logger.Warn().Msg(fmt.Sprint(args...)) +} + +func (l *Logger) Warningln(args ...any) { + l.Logger.Warn().Msg(fmt.Sprintln(args...)) +} + +func (l *Logger) V(level int) bool { + if level > 127 || level < 0 { + return false + } + if l.Logger.GetLevel() > zerolog.Level(int8(level)) { + return true + } + return false +} + func (l *Logger) SetPrefix(prefix string) { l.Lock() l.prefix = prefix diff --git a/wrap_test.go b/wrap_test.go index 78efe1d..c540011 100644 --- a/wrap_test.go +++ b/wrap_test.go @@ -80,6 +80,12 @@ func TestWrap(t *testing.T) { wrapped.Trace(v...) wrapped.Traceln(v...) wrapped.Logf("%v", v) + wrapped.Warning("%v", v) + wrapped.Warningf("%v", v) + } + + if wrapped.V(0) { + t.Error("V(0) should always return false") } t.Run("generic", func(t *testing.T) {