From db2e43387bb8e382ab36304e1860406713b443bd Mon Sep 17 00:00:00 2001 From: Leonard Lyubich Date: Tue, 11 May 2021 11:54:59 +0300 Subject: [PATCH] [#493] logger: Simplify Logger's parameters Replace `viper.Viper` parameter with `Prm` structure. Currently only logging level can be parameterized through string setter. Signed-off-by: Leonard Lyubich --- cmd/neofs-ir/main.go | 9 +++++++- cmd/neofs-node/config.go | 9 +++++++- go.sum | 4 ++++ pkg/util/logger/logger.go | 46 +++++++++++++++++++-------------------- 4 files changed, 43 insertions(+), 25 deletions(-) diff --git a/cmd/neofs-ir/main.go b/cmd/neofs-ir/main.go index 7457da523..d6ae0d27d 100644 --- a/cmd/neofs-ir/main.go +++ b/cmd/neofs-ir/main.go @@ -44,7 +44,14 @@ func main() { cfg, err := newConfig(*configFile) exitErr(err) - log, err := logger.NewLogger(cfg) + var logPrm logger.Prm + + err = logPrm.SetLevelString( + cfg.GetString("logger.level"), + ) + exitErr(err) + + log, err := logger.NewLogger(logPrm) exitErr(err) log = log.With( diff --git a/cmd/neofs-node/config.go b/cmd/neofs-node/config.go index e276299ec..016b0671b 100644 --- a/cmd/neofs-node/config.go +++ b/cmd/neofs-node/config.go @@ -352,7 +352,14 @@ func initCfg(path string) *cfg { viperCfg.GetString(cfgReputationContract)) fatalOnErr(err) - log, err := logger.NewLogger(viperCfg) + var logPrm logger.Prm + + err = logPrm.SetLevelString( + viperCfg.GetString(cfgLogLevel), + ) + fatalOnErr(err) + + log, err := logger.NewLogger(logPrm) fatalOnErr(err) log = log.With( diff --git a/go.sum b/go.sum index f601bfccc..79877c9a4 100644 --- a/go.sum +++ b/go.sum @@ -36,8 +36,10 @@ github.com/alecthomas/participle v0.6.0 h1:Pvo8XUCQKgIywVjz/+Ci3IsjGg+g/TdKkMcfg github.com/alecthomas/participle v0.6.0/go.mod h1:HfdmEuwvr12HXQN44HPWXR0lHmVolVYe4dyL6lQ3duY= github.com/alecthomas/repr v0.0.0-20181024024818-d37bc2a10ba1/go.mod h1:xTS7Pm1pD1mvyM075QCDSRqH6qRLXylzS24ZTpRiSzQ= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 h1:JYp7IbQjafoB+tBA3gMyHYHrpOtNuDiK/uB5uXxq5wM= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4 h1:Hs82Z41s6SdL1CELW+XaDYmOH4hkBN4/N9og/AsOv7E= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alicebob/gopher-json v0.0.0-20180125190556-5a6b3ba71ee6 h1:45bxf7AZMwWcqkLzDAQugVEwedisr5nRJ1r+7LYnv0U= github.com/alicebob/gopher-json v0.0.0-20180125190556-5a6b3ba71ee6/go.mod h1:SGnFV6hVsYE877CKEZ6tDNTjaSXYUk6QqoIK6PrAtcc= @@ -344,6 +346,7 @@ github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= @@ -577,6 +580,7 @@ google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpAD google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= gopkg.in/abiosoft/ishell.v2 v2.0.0/go.mod h1:sFp+cGtH6o4s1FtpVPTMcHq2yue+c4DGOVohJCPUzwY= +gopkg.in/alecthomas/kingpin.v2 v2.2.6 h1:jMFz6MfLP0/4fUyZle81rXUoxOBFi19VUFKVDOQfozc= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/pkg/util/logger/logger.go b/pkg/util/logger/logger.go index 179575d99..462b38e2a 100644 --- a/pkg/util/logger/logger.go +++ b/pkg/util/logger/logger.go @@ -2,9 +2,7 @@ package logger import ( "errors" - "strings" - "github.com/spf13/viper" "go.uber.org/zap" "go.uber.org/zap/zapcore" ) @@ -16,36 +14,38 @@ import ( // go.uber.org/zap.Logger. type Logger = zap.Logger +// Prm groups Logger's parameters. +type Prm struct { + level zapcore.Level +} + // ErrNilLogger is returned by functions that // expect a non-nil Logger, but received nil. var ErrNilLogger = errors.New("logger is nil") -// NewLogger is a logger's constructor. -func NewLogger(v *viper.Viper) (*Logger, error) { +// SetLevelString sets minimum logging level. +// +// Returns error of s is not a string representation of zap.Level +// value (see zapcore.Level docs). +func (p *Prm) SetLevelString(s string) error { + return p.level.UnmarshalText([]byte(s)) +} + +// NewLogger constructs a new zap logger instance. +// +// Logger is built from production logging configuration with: +// * parameterized level; +// * console encoding; +// * ISO8601 time encoding. +// +// Logger records a stack trace for all messages at or above fatal level. +func NewLogger(prm Prm) (*Logger, error) { c := zap.NewProductionConfig() - c.Level = safeLevel(v.GetString("logger.level")) + c.Level = zap.NewAtomicLevelAt(prm.level) c.Encoding = "console" c.EncoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder return c.Build( - // record a stack trace for all messages at or above fatal level zap.AddStacktrace(zap.NewAtomicLevelAt(zap.FatalLevel)), ) } - -func safeLevel(lvl string) zap.AtomicLevel { - switch strings.ToLower(lvl) { - case "debug": - return zap.NewAtomicLevelAt(zap.DebugLevel) - case "warn": - return zap.NewAtomicLevelAt(zap.WarnLevel) - case "error": - return zap.NewAtomicLevelAt(zap.ErrorLevel) - case "fatal": - return zap.NewAtomicLevelAt(zap.FatalLevel) - case "panic": - return zap.NewAtomicLevelAt(zap.PanicLevel) - default: - return zap.NewAtomicLevelAt(zap.InfoLevel) - } -}