diff --git a/go.mod b/go.mod index 80d3fcd..ba0bf10 100644 --- a/go.mod +++ b/go.mod @@ -8,6 +8,7 @@ require ( github.com/labstack/echo/v4 v4.10.2 github.com/pkg/errors v0.9.1 github.com/rs/zerolog v1.29.0 + github.com/sethvargo/go-envconfig v0.9.0 github.com/stretchr/testify v1.8.1 go.opentelemetry.io/otel v1.13.0 go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.36.0 diff --git a/go.sum b/go.sum index f4953fe..f4f091a 100644 --- a/go.sum +++ b/go.sum @@ -169,6 +169,8 @@ github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR github.com/rs/xid v1.4.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= github.com/rs/zerolog v1.29.0 h1:Zes4hju04hjbvkVkOhdl2HpZa+0PmVwigmo8XoORE5w= github.com/rs/zerolog v1.29.0/go.mod h1:NILgTygv/Uej1ra5XxGf82ZFSLk58MFGAUS2o6usyD0= +github.com/sethvargo/go-envconfig v0.9.0 h1:Q6FQ6hVEeTECULvkJZakq3dZMeBQ3JUpcKMfPQbKMDE= +github.com/sethvargo/go-envconfig v0.9.0/go.mod h1:Iz1Gy1Sf3T64TQlJSvee81qDhf7YIlt8GMUX6yyNFs0= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= diff --git a/loglevel/loglevel.go b/loglevel/loglevel.go new file mode 100644 index 0000000..a6725fc --- /dev/null +++ b/loglevel/loglevel.go @@ -0,0 +1,70 @@ +package loglevel + +import ( + "context" + "os" + + "github.com/rs/zerolog" + "github.com/sethvargo/go-envconfig" +) + +type Config struct { + Debug bool `env:"DEBUG,default=false"` +} + +func SetGlobal() { + var c Config + if err := envconfig.Process(context.Background(), &c); err != nil { + // do nothing, leave it at the default "not debug, therefore info+" + } + + zerolog.SetGlobalLevel(zerolog.InfoLevel) + if c.Debug { + zerolog.SetGlobalLevel(zerolog.DebugLevel) + } +} + +func SetLoggerLevel(l zerolog.Logger) zerolog.Logger { + lvl := zerolog.InfoLevel + var c Config + if err := envconfig.Process(context.Background(), &c); err != nil { + // do nothing, leave it at the default "not debug, therefore info+" + } + + if c.Debug { + lvl = zerolog.DebugLevel + } + + return l.Level(lvl) +} + +func FromEnv(prefix string) zerolog.Level { + return FromLookuper(prefix, envconfig.OsLookuper()) +} + +func FromLookuper(prefix string, l envconfig.Lookuper) zerolog.Level { + l = envconfig.PrefixLookuper(prefix, l) + c := getC(l) + + if c.Debug { + return zerolog.DebugLevel + } + + return zerolog.InfoLevel +} + +func getC(l envconfig.Lookuper) Config { + var c Config + if err := envconfig.ProcessWith(context.Background(), &c, l); err != nil { + // do nothing + } + return c +} + +func Baseline(prefix string) zerolog.Logger { + zerolog.TimeFieldFormat = zerolog.TimeFormatUnix + return zerolog.New(os.Stderr).With(). + Timestamp(). + Logger(). + Level(FromEnv(prefix)) +}