cosmos-sdk/server/v2/logger.go
2024-06-27 19:27:37 +00:00

46 lines
1.1 KiB
Go

package serverv2
import (
"io"
"github.com/rs/zerolog"
"github.com/spf13/viper"
corelog "cosmossdk.io/core/log"
"cosmossdk.io/log"
)
// NewLogger creates a the default SDK logger.
// It reads the log level and format from the server context.
func NewLogger(v *viper.Viper, out io.Writer) (corelog.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
}