feat: verbose logging during upgrades (#24720)
Co-authored-by: Alex | Interchain Labs <alex@interchainlabs.io>
This commit is contained in:
co-authored by
Alex | Interchain Labs
parent
3d777ad46a
commit
be955efe25
@@ -29,6 +29,7 @@ func Execute(rootCmd *cobra.Command, envPrefix, defaultHome string) error {
|
||||
// NOTE: The default logger is only checking for the "json" value, any other value will default to plain text.
|
||||
rootCmd.PersistentFlags().String(flags.FlagLogFormat, "plain", "The logging format (json|plain)")
|
||||
rootCmd.PersistentFlags().Bool(flags.FlagLogNoColor, false, "Disable colored logs")
|
||||
rootCmd.PersistentFlags().String(flags.FlagVerboseLogLevel, zerolog.DebugLevel.String(), "The logging level (trace|debug|info|warn|error|fatal|panic|disabled|none) to use when performing operations which require extra verbosity (such as upgrades). When enabled, verbose mode disables any custom log filters. Set this to none to make verbose mode equivalent to normal logging.")
|
||||
|
||||
executor := cmtcli.PrepareBaseCmd(rootCmd, envPrefix, defaultHome)
|
||||
return executor.ExecuteContext(ctx)
|
||||
|
||||
@@ -177,6 +177,15 @@ func CreateSDKLogger(ctx *Context, out io.Writer) (log.Logger, error) {
|
||||
// We use CometBFT flag (cmtcli.TraceFlag) for trace logging.
|
||||
log.TraceOption(ctx.Viper.GetBool(FlagTrace)))
|
||||
|
||||
verboseLogLevelStr := ctx.Viper.GetString(flags.FlagVerboseLogLevel)
|
||||
if verboseLogLevelStr != "" {
|
||||
verboseLogLvl, err := parseVerboseLogLevel(verboseLogLevelStr)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("invalid verbose log level: %s: %w", verboseLogLevelStr, err)
|
||||
}
|
||||
opts = append(opts, log.VerboseLevelOption(verboseLogLvl))
|
||||
}
|
||||
|
||||
// check and set filter level or keys for the logger if any
|
||||
logLvlStr := ctx.Viper.GetString(flags.FlagLogLevel)
|
||||
if logLvlStr == "" {
|
||||
@@ -200,6 +209,14 @@ func CreateSDKLogger(ctx *Context, out io.Writer) (log.Logger, error) {
|
||||
return log.NewLogger(out, opts...), nil
|
||||
}
|
||||
|
||||
// parseVerboseLogLevel parses the string "none" as zerolog.NoLevel and all other level strings using zerolog.ParseLevel.
|
||||
func parseVerboseLogLevel(verboseLogLevelStr string) (zerolog.Level, error) {
|
||||
if verboseLogLevelStr == "none" {
|
||||
return zerolog.NoLevel, nil
|
||||
}
|
||||
return zerolog.ParseLevel(verboseLogLevelStr)
|
||||
}
|
||||
|
||||
// GetServerContextFromCmd returns a Context from a command or an empty Context
|
||||
// if it has not been set.
|
||||
func GetServerContextFromCmd(cmd *cobra.Command) *Context {
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
package server
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/rs/zerolog"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestParseVerboseLogLevel(t *testing.T) {
|
||||
tt := []struct {
|
||||
input string
|
||||
expected zerolog.Level
|
||||
}{
|
||||
// mainly testing that none maps to NoLevel, but checking other cases too for sanity
|
||||
{"none", zerolog.NoLevel},
|
||||
{"debug", zerolog.DebugLevel},
|
||||
{"info", zerolog.InfoLevel},
|
||||
{"warn", zerolog.WarnLevel},
|
||||
{"error", zerolog.ErrorLevel},
|
||||
{"fatal", zerolog.FatalLevel},
|
||||
{"panic", zerolog.PanicLevel},
|
||||
{"trace", zerolog.TraceLevel},
|
||||
{"disabled", zerolog.Disabled},
|
||||
}
|
||||
|
||||
for _, tc := range tt {
|
||||
lvl, err := parseVerboseLogLevel(tc.input)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, tc.expected, lvl)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user