cosmos-sdk/server/v2/logger.go
Aaron Craelius 5c90246b3f
feat(log): remove core dependency and update core interface to be dependency free (#21045)
Co-authored-by: marbar3778 <marbar3778@yahoo.com>
Co-authored-by: Julien Robert <julien@rbrt.fr>
2024-07-26 11:00:27 +00:00

45 lines
1.1 KiB
Go

package serverv2
import (
"io"
"github.com/rs/zerolog"
"github.com/spf13/viper"
"cosmossdk.io/log"
)
// NewLogger creates the default SDK logger.
// It reads the log level and format from the server context.
func NewLogger(v *viper.Viper, out io.Writer) (log.Logger, error) {
var opts []log.Option
if v.GetString(FlagLogFormat) == OutputFormatJSON {
opts = append(opts, log.OutputJSONOption())
}
opts = append(opts,
log.ColorOption(!v.GetBool(FlagLogNoColor)),
log.TraceOption(v.GetBool(FlagTrace)))
// check and set filter level or keys for the logger if any
logLvlStr := v.GetString(FlagLogLevel)
if logLvlStr == "" {
return log.NewLogger(out, opts...), nil
}
logLvl, err := zerolog.ParseLevel(logLvlStr)
switch {
case err != nil:
// If the log level is not a valid zerolog level, then we try to parse it as a key filter.
filterFunc, err := log.ParseLogLevel(logLvlStr)
if err != nil {
return nil, err
}
opts = append(opts, log.FilterOption(filterFunc))
default:
opts = append(opts, log.LevelOption(logLvl))
}
return log.NewLogger(out, opts...), nil
}