From 047380eac6e8393f65faf688d5a5501fed855b4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= Date: Wed, 26 Feb 2020 16:30:04 +0100 Subject: [PATCH] use new options, wrap logger MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Jörn Friedrich Dreyer --- go.mod | 4 +- go.sum | 7 +++ pkg/command/server.go | 11 ++-- pkg/mlogr/mlogr.go | 134 ++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 150 insertions(+), 6 deletions(-) create mode 100644 pkg/mlogr/mlogr.go diff --git a/go.mod b/go.mod index 47f1b8d123..598d790fbf 100644 --- a/go.mod +++ b/go.mod @@ -7,13 +7,15 @@ require ( contrib.go.opencensus.io/exporter/ocagent v0.6.0 contrib.go.opencensus.io/exporter/zipkin v0.1.1 github.com/UnnoTed/fileb0x v1.1.4 - github.com/glauth/glauth v1.1.2 + github.com/glauth/glauth v1.1.3-0.20200226140131-592fdf4e7938 + github.com/go-logr/logr v0.1.0 github.com/micro/cli/v2 v2.1.1 github.com/oklog/run v1.0.0 github.com/op/go-logging v0.0.0-20160315200505-970db520ece7 github.com/openzipkin/zipkin-go v0.2.2 github.com/owncloud/ocis-pkg/v2 v2.0.1 github.com/restic/calens v0.2.0 + github.com/rs/zerolog v1.17.2 github.com/spf13/afero v1.2.2 // indirect github.com/spf13/viper v1.5.0 go.opencensus.io v0.22.2 diff --git a/go.sum b/go.sum index ca134b5ed9..ea76dc4e87 100644 --- a/go.sum +++ b/go.sum @@ -82,6 +82,7 @@ github.com/bmatcuk/doublestar v1.1.1/go.mod h1:UD6OnuiIn0yFxxA2le/rnRU1G4RaI4UvF github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4= github.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc h1:biVzkmvwrH8WK8raXaxBx6fRVTlJILwEwQGL1I/ByEI= github.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= +github.com/butonic/zerologr v0.0.0-20191210074216-d798ee237d84/go.mod h1:Jw3eYm4TLfPMNKzimBDxXceOJhFF7Oix/zd2PTK3UrM= github.com/bwmarrin/discordgo v0.19.0/go.mod h1:O9S4p+ofTFwB02em7jkpkV8M3R0/PUVOwN61zSZ0r4Q= github.com/bwmarrin/discordgo v0.20.1/go.mod h1:O9S4p+ofTFwB02em7jkpkV8M3R0/PUVOwN61zSZ0r4Q= github.com/bwmarrin/discordgo v0.20.2/go.mod h1:O9S4p+ofTFwB02em7jkpkV8M3R0/PUVOwN61zSZ0r4Q= @@ -145,6 +146,7 @@ github.com/docker/docker v1.4.2-0.20190710153559-aa8249ae1b8b/go.mod h1:eEKB0N0r github.com/docker/docker v1.4.2-0.20191101170500-ac7306503d23/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815 h1:bWDMxwH3px2JBh6AyO7hdCn/PkvCZXii8TGj7sbtEbQ= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= @@ -167,6 +169,8 @@ github.com/gizak/termui/v3 v3.1.0 h1:ZZmVDgwHl7gR7elfKf1xc4IudXZ5qqfDh4wExk4Iajc github.com/gizak/termui/v3 v3.1.0/go.mod h1:bXQEBkJpzxUAKf0+xq9MSWAvWZlE7c+aidmyFlkYTrY= github.com/glauth/glauth v1.1.2 h1:BCbXV8f0zELcEOK9+YdPlYcEkI4iAz18ac7jDbcLoOE= github.com/glauth/glauth v1.1.2/go.mod h1:QfLlWZurvnFao/aEFuZ4NGj34ncrVGBBK7bRXmyOeag= +github.com/glauth/glauth v1.1.3-0.20200226140131-592fdf4e7938 h1:vlFGzeg1qlFIKwznLIVOTTwo1eM9I4dxBUVxiC7R92k= +github.com/glauth/glauth v1.1.3-0.20200226140131-592fdf4e7938/go.mod h1:ygO1z1pcp79iBrjbA6vqrsUxIonStjBncosl2a9/Dx8= github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= github.com/go-acme/lego/v3 v3.1.0/go.mod h1:074uqt+JS6plx+c9Xaiz6+L+GBb+7itGtzfcDM2AhEE= github.com/go-acme/lego/v3 v3.3.0/go.mod h1:iGSY2vQrvQs3WezicSB/oVbO2eCrD88dpWPwb1qLqu0= @@ -182,6 +186,7 @@ github.com/go-log/log v0.1.0 h1:wudGTNsiGzrD5ZjgIkVZ517ugi2XRe9Q/xRCzwEO4/U= github.com/go-log/log v0.1.0/go.mod h1:4mBwpdRMFLiuXZDCwU2lKQFsoSCo72j3HqBK9d81N2M= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= +github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-playground/locales v0.12.1/go.mod h1:IUMDtCfWo/w/mtMfIE/IG2K+Ey3ygWanZIBtBW0W2TM= github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= github.com/go-playground/universal-translator v0.16.0/go.mod h1:1AnU7NaIRDWWzGEKwgtJRd2xk99HeFyHw3yid4rvQIY= @@ -271,6 +276,7 @@ github.com/imdario/mergo v0.3.8 h1:CGgOkSJeqMRmt0D9XLWExdT4m4F1vd3FV3VPt+0VxkQ= github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +github.com/jinzhu/copier v0.0.0-20190924061706-b57f9002281a h1:zPPuIq2jAWWPTrGt70eK/BSch+gFAGrNzecsoENgu2o= github.com/jinzhu/copier v0.0.0-20190924061706-b57f9002281a/go.mod h1:yL958EeXv8Ylng6IfnvG4oflryUi3vgA3xPs9hmII1s= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jonboulle/clockwork v0.1.0 h1:VKV+ZcuP6l3yW9doeqz6ziZGgcynBVQO+obU0+0hcPo= @@ -799,6 +805,7 @@ google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQ google.golang.org/grpc v1.26.0 h1:2dTRdpdFEEhJYQD8EMLB61nnrzSCTbG38PhqdhvOltg= google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= +gopkg.in/amz.v1 v1.0.0-20150111123259-ad23e96a31d2 h1:FMrsB0OTjHsPDA1NM7AhRmmZzkBPu3iGdxK/5MFfBmk= gopkg.in/amz.v1 v1.0.0-20150111123259-ad23e96a31d2/go.mod h1:F0YaN4yi2XekmElKkPYfybh7pReQE9Ph48lSgeCkzyc= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= diff --git a/pkg/command/server.go b/pkg/command/server.go index 66777fdef6..79d80d60fd 100644 --- a/pkg/command/server.go +++ b/pkg/command/server.go @@ -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(). diff --git a/pkg/mlogr/mlogr.go b/pkg/mlogr/mlogr.go new file mode 100644 index 0000000000..eb3509b361 --- /dev/null +++ b/pkg/mlogr/mlogr.go @@ -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{}