use new options, wrap logger

Signed-off-by: Jörn Friedrich Dreyer <jfd@butonic.de>
This commit is contained in:
Jörn Friedrich Dreyer
2020-02-28 09:57:42 +01:00
parent 460cde921d
commit 047380eac6
4 changed files with 150 additions and 6 deletions
+6 -5
View File
@@ -14,11 +14,11 @@ import (
glauth "github.com/glauth/glauth/pkg/server"
"github.com/micro/cli/v2"
"github.com/oklog/run"
glauthlog "github.com/op/go-logging"
openzipkin "github.com/openzipkin/zipkin-go"
zipkinhttp "github.com/openzipkin/zipkin-go/reporter/http"
"github.com/owncloud/ocis-glauth/pkg/config"
"github.com/owncloud/ocis-glauth/pkg/flagset"
"github.com/owncloud/ocis-glauth/pkg/mlogr"
"github.com/owncloud/ocis-glauth/pkg/server/debug"
"go.opencensus.io/stats/view"
"go.opencensus.io/trace"
@@ -135,7 +135,7 @@ func Server(cfg *config.Config) *cli.Command {
defer cancel()
{
log := glauthlog.MustGetLogger("ocis-glauth")
log := mlogr.New(&logger)
cfg := glauthcfg.Config{
LDAP: glauthcfg.LDAP{
Enabled: cfg.Ldap.Enabled,
@@ -156,9 +156,10 @@ func Server(cfg *config.Config) *cli.Command {
UseGraphAPI: cfg.Backend.UseGraphAPI,
},
}
server, err := glauth.NewServer(log, &cfg)
//XXX(deepdiver) start ldap server
//err := errors.New("not implemented yet")
server, err := glauth.NewServer(
glauth.Logger(log),
glauth.Config(&cfg),
)
if err != nil {
logger.Info().
+134
View File
@@ -0,0 +1,134 @@
package mlogr
import (
"errors"
"github.com/go-logr/logr"
plog "github.com/owncloud/ocis-pkg/v2/log"
"github.com/rs/zerolog"
)
const debugVerbosity = 6
const traceVerbosity = 8
// New returns a logr.Logger which is implemented by the log.
func New(l *plog.Logger) logr.Logger {
return logger{
l: l,
verbosity: 0,
prefix: "glauth",
values: nil,
}
}
// logger is a logr.Logger that uses the ocis-pkg log.
type logger struct {
l *plog.Logger
verbosity int
prefix string
values []interface{}
}
func (l logger) clone() logger {
out := l
out.values = copySlice(l.values)
return out
}
func copySlice(in []interface{}) []interface{} {
out := make([]interface{}, len(in))
copy(out, in)
return out
}
// add converts a bunch of arbitrary key-value pairs into zerolog fields.
func add(e *zerolog.Event, keysAndVals []interface{}) {
// make sure we got an even number of arguments
if len(keysAndVals)%2 != 0 {
e.Interface("args", keysAndVals).
AnErr("zerologr-err", errors.New("odd number of arguments passed as key-value pairs for logging")).
Stack()
return
}
for i := 0; i < len(keysAndVals); {
// process a key-value pair,
// ensuring that the key is a string
key, val := keysAndVals[i], keysAndVals[i+1]
keyStr, isString := key.(string)
if !isString {
// if the key isn't a string, log additional error
e.Interface("invalid key", key).
AnErr("zerologr-err", errors.New("non-string key argument passed to logging, ignoring all later arguments")).
Stack()
return
}
e.Interface(keyStr, val)
i += 2
}
}
func (l logger) Info(msg string, keysAndVals ...interface{}) {
if l.Enabled() {
var e *zerolog.Event
if l.verbosity < debugVerbosity {
e = l.l.Info()
} else if l.verbosity < traceVerbosity {
e = l.l.Debug()
} else {
e = l.l.Trace()
}
e.Int("verbosity", l.verbosity)
if l.prefix != "" {
e.Str("name", l.prefix)
}
add(e, l.values)
add(e, keysAndVals)
e.Msg(msg)
}
}
func (l logger) Enabled() bool {
return true
}
func (l logger) Error(err error, msg string, keysAndVals ...interface{}) {
e := l.l.Error().Err(err)
if l.prefix != "" {
e.Str("name", l.prefix)
}
add(e, l.values)
add(e, keysAndVals)
e.Msg(msg)
}
func (l logger) V(verbosity int) logr.InfoLogger {
//new := l.clone()
//new.level = level
//return new
l.verbosity = verbosity
return l
}
// WithName returns a new logr.Logger with the specified name appended. zerologr
// uses '/' characters to separate name elements. Callers should not pass '/'
// in the provided name string, but this library does not actually enforce that.
func (l logger) WithName(name string) logr.Logger {
new := l.clone()
if len(l.prefix) > 0 {
new.prefix = l.prefix + "/"
}
new.prefix += name
return new
}
func (l logger) WithValues(kvList ...interface{}) logr.Logger {
new := l.clone()
new.values = append(new.values, kvList...)
return new
}
var _ logr.Logger = logger{}
var _ logr.InfoLogger = logger{}