Feat: introduce google.golang.org/grpc/grpclog.LoggerV2 compatibility

This commit is contained in:
kayos@tcp.direct 2024-05-19 20:26:32 -07:00
parent 54125e2e31
commit dd9ca58d52
Signed by: kayos
GPG Key ID: 4B841471B4BEE979
6 changed files with 84 additions and 31 deletions

39
compat.go Normal file

@ -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{}
)

8
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
)

3
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=

12
util.go Normal file

@ -0,0 +1,12 @@
package zwrap
import (
"strings"
"sync"
)
var strBufs = &sync.Pool{
New: func() interface{} {
return new(strings.Builder)
},
}

47
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

@ -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) {