From 63ed9151e68f2211a4f721d664104669d56a7c56 Mon Sep 17 00:00:00 2001 From: axaysagathiya Date: Wed, 7 Jun 2023 15:04:25 +0530 Subject: [PATCH 01/13] add logs flag and remove other logging flags --- cmd/gossamer/commands/root.go | 125 ++++++++++++++-------------------- 1 file changed, 51 insertions(+), 74 deletions(-) diff --git a/cmd/gossamer/commands/root.go b/cmd/gossamer/commands/root.go index 5f0b1b3b4d..3b8c69fa96 100644 --- a/cmd/gossamer/commands/root.go +++ b/cmd/gossamer/commands/root.go @@ -6,6 +6,7 @@ package commands import ( "fmt" "os" + "strings" "github.com/ChainSafe/gossamer/dot" @@ -16,6 +17,7 @@ import ( "github.com/ChainSafe/gossamer/internal/log" "github.com/spf13/cobra" + "github.com/spf13/viper" ) // Package level variables @@ -162,9 +164,8 @@ func addRootFlags(cmd *cobra.Command) error { } // Log Config - if err := addLogFlags(cmd); err != nil { - return fmt.Errorf("failed to add log flags: %s", err) - } + cmd.Flags().String("logs", "", "log accepts values in module:logLevel format (comma separated)") + viper.BindPFlag("logs", cmd.Flags().Lookup("logs")) // Account Config if err := addAccountFlags(cmd); err != nil { @@ -233,10 +234,6 @@ func addBaseConfigFlags(cmd *cobra.Command) error { "retain-blocks"); err != nil { return fmt.Errorf("failed to add --retain-blocks flag: %s", err) } - cmd.Flags().StringVar(&logLevelGlobal, - "log", - config.BaseConfig.LogLevel, - "Global log level. Supports levels critical (silent), error, warn, info, debug and trace") cmd.Flags().StringVar(&pruning, "state-pruning", string(config.BaseConfig.Pruning), @@ -260,80 +257,56 @@ Expected format is 'URL VERBOSITY', e.g. ''--telemetry-url wss://foo/bar:0, wss: return nil } -// addLogFlags adds the log flags to the command -func addLogFlags(cmd *cobra.Command) error { - if err := addStringFlagBindViper(cmd, - "lcore", - config.Log.Core, - "Core module log level", - "log.core"); err != nil { - return fmt.Errorf("failed to add --lcore flag: %s", err) - } - - if err := addStringFlagBindViper(cmd, - "ldigest", - config.Log.Digest, - "Digest module log level", - "log.digest"); err != nil { - return fmt.Errorf("failed to add --ldigest flag: %s", err) - } - - if err := addStringFlagBindViper(cmd, - "lsync", - config.Log.Sync, - "Sync module log level", - "log.sync"); err != nil { - return fmt.Errorf("failed to add --lsync flag: %s", err) - } - - if err := addStringFlagBindViper(cmd, - "lnetwork", - config.Log.Network, - "Network module log level", - "log.network"); err != nil { - return fmt.Errorf("failed to add --lnetwork flag: %s", err) - } - - if err := addStringFlagBindViper(cmd, - "lrpc", - config.Log.RPC, - "RPC module log level", - "log.rpc"); err != nil { - return fmt.Errorf("failed to add --lrpc flag: %s", err) +func configureLogLevel(cmd *cobra.Command) error { + customLog := viper.GetString("logs") + if len(customLog) == 0 { + return nil } - if err := addStringFlagBindViper(cmd, - "lstate", - config.Log.State, - "State module log level", - "log.state"); err != nil { - return fmt.Errorf("failed to add --lstate flag: %s", err) - } + logConfigurations := strings.Split(customLog, ",") + for _, config := range logConfigurations { + parts := strings.SplitN(config, ":", 2) + if len(parts) != 2 { + return fmt.Errorf("Invalid log configuration: %s", config) + } - if err := addStringFlagBindViper(cmd, - "lruntime", - config.Log.Runtime, - "Runtime module log level", - "log.runtime"); err != nil { - return fmt.Errorf("failed to add --lruntime flag: %s", err) - } + module := strings.TrimSpace(parts[0]) + logLevel := strings.TrimSpace(parts[1]) - if err := addStringFlagBindViper(cmd, - "lbabe", - config.Log.Babe, - "BABE module log level", - "log.babe"); err != nil { - return fmt.Errorf("failed to add --lbabe flag: %s", err) + if err := setLogLevel(module, logLevel); err != nil { + return err + } } + return nil +} - if err := addStringFlagBindViper(cmd, - "lgrandpa", - config.Log.Grandpa, - "GRANDPA module log level", - "log.grandpa"); err != nil { - return fmt.Errorf("failed to add --lgrandpa flag: %s", err) +func setLogLevel(module string, logLevel string) error { + switch module { + case "global": + config.BaseConfig.LogLevel = logLevel + case "core": + config.Log.Core = logLevel + case "digest": + config.Log.Digest = logLevel + case "sync": + config.Log.Sync = logLevel + case "network": + config.Log.Network = logLevel + case "rpc": + config.Log.RPC = logLevel + case "state": + config.Log.State = logLevel + case "runtime": + config.Log.Runtime = logLevel + case "babe": + config.Log.Babe = logLevel + case "grandpa": + config.Log.Grandpa = logLevel + case "wasmer": + config.Log.Wasmer = logLevel + default: + return fmt.Errorf("Invalid log module: %s", module) } - return nil } @@ -667,6 +640,10 @@ func execRoot(cmd *cobra.Command) error { return fmt.Errorf("failed to validate config: %s", err) } + if err := configureLogLevel(cmd); err != nil { + return fmt.Errorf("failed to configure log level: %s", err) + } + // Write the config to the base path if err := cfg.WriteConfigFile(config.BasePath, config); err != nil { return fmt.Errorf("failed to ensure root: %s", err) From b0f534235ee4fa8547fe55b579e592a1889af4a8 Mon Sep 17 00:00:00 2001 From: axaysagathiya Date: Wed, 7 Jun 2023 23:16:01 +0530 Subject: [PATCH 02/13] add logs flag description --- cmd/gossamer/commands/root.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/cmd/gossamer/commands/root.go b/cmd/gossamer/commands/root.go index 3b8c69fa96..7bedb40ca4 100644 --- a/cmd/gossamer/commands/root.go +++ b/cmd/gossamer/commands/root.go @@ -164,7 +164,12 @@ func addRootFlags(cmd *cobra.Command) error { } // Log Config - cmd.Flags().String("logs", "", "log accepts values in module:logLevel format (comma separated)") + cmd.Flags().String("logs", "", `Set a logging filter. +Syntax is a list of 'module:logLevel' (comma separated) +e.g. --logs sync:debug,core:trace +Log levels (least to most verbose) are error, warn, info, debug, and trace. +By default, all modules log 'info'. +The global log level can be set with --logs global:debug`) viper.BindPFlag("logs", cmd.Flags().Lookup("logs")) // Account Config From 0c9f43aab767f9bdc2cf5af2a7718ce9325c830e Mon Sep 17 00:00:00 2001 From: axaysagathiya Date: Thu, 8 Jun 2023 11:49:03 +0530 Subject: [PATCH 03/13] set default log values in config.toml file --- cmd/gossamer/commands/root.go | 71 +++++++++++++++++++++++------------ 1 file changed, 47 insertions(+), 24 deletions(-) diff --git a/cmd/gossamer/commands/root.go b/cmd/gossamer/commands/root.go index 7bedb40ca4..bde055d5c9 100644 --- a/cmd/gossamer/commands/root.go +++ b/cmd/gossamer/commands/root.go @@ -119,6 +119,10 @@ Usage: } } + if err := configureLogLevel(cmd); err != nil { + return fmt.Errorf("failed to configure log level: %s", err) + } + if cmd.Name() == "gossamer" { if err := configureViper(config.BasePath); err != nil { return fmt.Errorf("failed to configure viper: %s", err) @@ -164,13 +168,16 @@ func addRootFlags(cmd *cobra.Command) error { } // Log Config - cmd.Flags().String("logs", "", `Set a logging filter. -Syntax is a list of 'module:logLevel' (comma separated) -e.g. --logs sync:debug,core:trace -Log levels (least to most verbose) are error, warn, info, debug, and trace. -By default, all modules log 'info'. -The global log level can be set with --logs global:debug`) - viper.BindPFlag("logs", cmd.Flags().Lookup("logs")) + addStringFlagBindViper( + cmd, "logs", "", + `Set a logging filter. + Syntax is a list of 'module:logLevel' (comma separated) + e.g. --logs sync:debug,core:trace + Log levels (least to most verbose) are error, warn, info, debug, and trace. + By default, all modules log 'info'. + The global log level can be set with --logs global:debug`, + "logs", + ) // Account Config if err := addAccountFlags(cmd); err != nil { @@ -263,25 +270,45 @@ Expected format is 'URL VERBOSITY', e.g. ''--telemetry-url wss://foo/bar:0, wss: } func configureLogLevel(cmd *cobra.Command) error { - customLog := viper.GetString("logs") - if len(customLog) == 0 { - return nil + // set default log level + moduleToLogLevel := map[string]string{ + "log-level": config.LogLevel, + "core": config.Log.Core, + "digest": config.Log.Digest, + "sync": config.Log.Sync, + "network": config.Log.Network, + "rpc": config.Log.RPC, + "state": config.Log.State, + "runtime": config.Log.Runtime, + "babe": config.Log.Babe, + "grandpa": config.Log.Grandpa, + "wasmer": config.Log.Wasmer, } - logConfigurations := strings.Split(customLog, ",") - for _, config := range logConfigurations { - parts := strings.SplitN(config, ":", 2) - if len(parts) != 2 { - return fmt.Errorf("Invalid log configuration: %s", config) - } + customLog := viper.GetString("logs") + if len(customLog) > 0 { + logConfigurations := strings.Split(customLog, ",") + // moduleToLogLevel := make(map[string]string) + for _, config := range logConfigurations { + parts := strings.SplitN(config, ":", 2) + if len(parts) != 2 { + return fmt.Errorf("Invalid log configuration: %s", config) + } - module := strings.TrimSpace(parts[0]) - logLevel := strings.TrimSpace(parts[1]) + module := strings.TrimSpace(parts[0]) + logLevel := strings.TrimSpace(parts[1]) - if err := setLogLevel(module, logLevel); err != nil { - return err + moduleToLogLevel[module] = logLevel } } + + globalLogLevel, ok := moduleToLogLevel["global"] + if ok { + moduleToLogLevel["log-level"] = globalLogLevel + } + + viper.Set("log-level", moduleToLogLevel["log-level"]) + viper.Set("log", moduleToLogLevel) return nil } @@ -645,10 +672,6 @@ func execRoot(cmd *cobra.Command) error { return fmt.Errorf("failed to validate config: %s", err) } - if err := configureLogLevel(cmd); err != nil { - return fmt.Errorf("failed to configure log level: %s", err) - } - // Write the config to the base path if err := cfg.WriteConfigFile(config.BasePath, config); err != nil { return fmt.Errorf("failed to ensure root: %s", err) From 2ada3c5678e6068172550ad81a5ab92dfe85f024 Mon Sep 17 00:00:00 2001 From: axaysagathiya Date: Thu, 8 Jun 2023 15:24:35 +0530 Subject: [PATCH 04/13] improvement --- cmd/gossamer/commands/root.go | 83 ++++++++++++++--------------------- 1 file changed, 32 insertions(+), 51 deletions(-) diff --git a/cmd/gossamer/commands/root.go b/cmd/gossamer/commands/root.go index bde055d5c9..b6ad73f911 100644 --- a/cmd/gossamer/commands/root.go +++ b/cmd/gossamer/commands/root.go @@ -4,6 +4,7 @@ package commands import ( + "encoding/json" "fmt" "os" "strings" @@ -119,10 +120,6 @@ Usage: } } - if err := configureLogLevel(cmd); err != nil { - return fmt.Errorf("failed to configure log level: %s", err) - } - if cmd.Name() == "gossamer" { if err := configureViper(config.BasePath); err != nil { return fmt.Errorf("failed to configure viper: %s", err) @@ -137,6 +134,10 @@ Usage: } } + if err := parseLogLevel(cmd); err != nil { + return fmt.Errorf("failed to configure log level: %s", err) + } + return nil }, SilenceErrors: true, @@ -269,26 +270,27 @@ Expected format is 'URL VERBOSITY', e.g. ''--telemetry-url wss://foo/bar:0, wss: return nil } -func configureLogLevel(cmd *cobra.Command) error { +func parseLogLevel(cmd *cobra.Command) error { // set default log level moduleToLogLevel := map[string]string{ - "log-level": config.LogLevel, - "core": config.Log.Core, - "digest": config.Log.Digest, - "sync": config.Log.Sync, - "network": config.Log.Network, - "rpc": config.Log.RPC, - "state": config.Log.State, - "runtime": config.Log.Runtime, - "babe": config.Log.Babe, - "grandpa": config.Log.Grandpa, - "wasmer": config.Log.Wasmer, + "global": cfg.DefaultLogLevel, + "core": cfg.DefaultLogLevel, + "digest": cfg.DefaultLogLevel, + "sync": cfg.DefaultLogLevel, + "network": cfg.DefaultLogLevel, + "rpc": cfg.DefaultLogLevel, + "state": cfg.DefaultLogLevel, + "runtime": cfg.DefaultLogLevel, + "babe": cfg.DefaultLogLevel, + "grandpa": cfg.DefaultLogLevel, + "wasmer": cfg.DefaultLogLevel, } customLog := viper.GetString("logs") + if len(customLog) > 0 { logConfigurations := strings.Split(customLog, ",") - // moduleToLogLevel := make(map[string]string) + for _, config := range logConfigurations { parts := strings.SplitN(config, ":", 2) if len(parts) != 2 { @@ -298,47 +300,26 @@ func configureLogLevel(cmd *cobra.Command) error { module := strings.TrimSpace(parts[0]) logLevel := strings.TrimSpace(parts[1]) + if _, ok := moduleToLogLevel[module]; !ok { + return fmt.Errorf("Invalid module: %s", module) + } + moduleToLogLevel[module] = logLevel } } - globalLogLevel, ok := moduleToLogLevel["global"] - if ok { - moduleToLogLevel["log-level"] = globalLogLevel - } + config.LogLevel = moduleToLogLevel["global"] - viper.Set("log-level", moduleToLogLevel["log-level"]) - viper.Set("log", moduleToLogLevel) - return nil -} + jsonData, err := json.Marshal(moduleToLogLevel) + if err != nil { + return fmt.Errorf("Error marshaling logs: %s", err) + } -func setLogLevel(module string, logLevel string) error { - switch module { - case "global": - config.BaseConfig.LogLevel = logLevel - case "core": - config.Log.Core = logLevel - case "digest": - config.Log.Digest = logLevel - case "sync": - config.Log.Sync = logLevel - case "network": - config.Log.Network = logLevel - case "rpc": - config.Log.RPC = logLevel - case "state": - config.Log.State = logLevel - case "runtime": - config.Log.Runtime = logLevel - case "babe": - config.Log.Babe = logLevel - case "grandpa": - config.Log.Grandpa = logLevel - case "wasmer": - config.Log.Wasmer = logLevel - default: - return fmt.Errorf("Invalid log module: %s", module) + err = json.Unmarshal(jsonData, &config.Log) + if err != nil { + return fmt.Errorf("Error unmarshaling logs: %s", err) } + return nil } From c6e68bbf8cbe21e02feeb5758eaf29e8f1b41c76 Mon Sep 17 00:00:00 2001 From: axaysagathiya Date: Thu, 8 Jun 2023 16:03:14 +0530 Subject: [PATCH 05/13] lint --- cmd/gossamer/commands/root.go | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/cmd/gossamer/commands/root.go b/cmd/gossamer/commands/root.go index b6ad73f911..6c9b10579a 100644 --- a/cmd/gossamer/commands/root.go +++ b/cmd/gossamer/commands/root.go @@ -30,9 +30,8 @@ var ( // Flag values for the root command which needs type conversion var ( // Base Config - logLevelGlobal string - pruning string - telemetryURLs string + pruning string + telemetryURLs string // Core Config // role of the node. one of: full, light or authority @@ -134,7 +133,7 @@ Usage: } } - if err := parseLogLevel(cmd); err != nil { + if err := parseLogLevel(); err != nil { return fmt.Errorf("failed to configure log level: %s", err) } @@ -169,7 +168,7 @@ func addRootFlags(cmd *cobra.Command) error { } // Log Config - addStringFlagBindViper( + if err := addStringFlagBindViper( cmd, "logs", "", `Set a logging filter. Syntax is a list of 'module:logLevel' (comma separated) @@ -178,7 +177,9 @@ func addRootFlags(cmd *cobra.Command) error { By default, all modules log 'info'. The global log level can be set with --logs global:debug`, "logs", - ) + ); err != nil { + return fmt.Errorf("failed to add logs flag: %s", err) + } // Account Config if err := addAccountFlags(cmd); err != nil { @@ -270,7 +271,7 @@ Expected format is 'URL VERBOSITY', e.g. ''--telemetry-url wss://foo/bar:0, wss: return nil } -func parseLogLevel(cmd *cobra.Command) error { +func parseLogLevel() error { // set default log level moduleToLogLevel := map[string]string{ "global": cfg.DefaultLogLevel, @@ -312,12 +313,12 @@ func parseLogLevel(cmd *cobra.Command) error { jsonData, err := json.Marshal(moduleToLogLevel) if err != nil { - return fmt.Errorf("Error marshaling logs: %s", err) + return fmt.Errorf("Error marshalling logs: %s", err) } err = json.Unmarshal(jsonData, &config.Log) if err != nil { - return fmt.Errorf("Error unmarshaling logs: %s", err) + return fmt.Errorf("Error unmarshalling logs: %s", err) } return nil From 9116e1946703a6e9585224ec4803d3fc51f2569a Mon Sep 17 00:00:00 2001 From: axaysagathiya Date: Fri, 9 Jun 2023 19:30:52 +0530 Subject: [PATCH 06/13] remove viper binding and rename flag to log --- cmd/gossamer/commands/root.go | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/cmd/gossamer/commands/root.go b/cmd/gossamer/commands/root.go index 6c9b10579a..7d8be85f60 100644 --- a/cmd/gossamer/commands/root.go +++ b/cmd/gossamer/commands/root.go @@ -18,7 +18,6 @@ import ( "github.com/ChainSafe/gossamer/internal/log" "github.com/spf13/cobra" - "github.com/spf13/viper" ) // Package level variables @@ -30,6 +29,7 @@ var ( // Flag values for the root command which needs type conversion var ( // Base Config + logLevel string pruning string telemetryURLs string @@ -79,6 +79,8 @@ Usage: gossamer --chain kusama --key charlie --port 7004 gossamer --chain polkadot --key dave --port 7005`, RunE: func(cmd *cobra.Command, args []string) error { + fmt.Printf("config.LogLevel => \n%+v\n\n", config.LogLevel) + fmt.Printf("config.Log => \n%+v\n\n", config.Log) return execRoot(cmd) }, PersistentPreRunE: func(cmd *cobra.Command, args []string) (err error) { @@ -168,18 +170,13 @@ func addRootFlags(cmd *cobra.Command) error { } // Log Config - if err := addStringFlagBindViper( - cmd, "logs", "", + cmd.Flags().StringVar(&logLevel, "log", "", `Set a logging filter. - Syntax is a list of 'module:logLevel' (comma separated) - e.g. --logs sync:debug,core:trace + Syntax is a list of 'module=logLevel' (comma separated) + e.g. --log sync=debug,core=trace Log levels (least to most verbose) are error, warn, info, debug, and trace. By default, all modules log 'info'. - The global log level can be set with --logs global:debug`, - "logs", - ); err != nil { - return fmt.Errorf("failed to add logs flag: %s", err) - } + The global log level can be set with --log global=debug`) // Account Config if err := addAccountFlags(cmd); err != nil { @@ -287,13 +284,11 @@ func parseLogLevel() error { "wasmer": cfg.DefaultLogLevel, } - customLog := viper.GetString("logs") - - if len(customLog) > 0 { - logConfigurations := strings.Split(customLog, ",") + if len(logLevel) > 0 { + logConfigurations := strings.Split(logLevel, ",") for _, config := range logConfigurations { - parts := strings.SplitN(config, ":", 2) + parts := strings.SplitN(config, "=", 2) if len(parts) != 2 { return fmt.Errorf("Invalid log configuration: %s", config) } From e0e6b2241192c91e1ee294c1f9a7e0ca2e2f12ba Mon Sep 17 00:00:00 2001 From: axaysagathiya Date: Fri, 9 Jun 2023 19:44:37 +0530 Subject: [PATCH 07/13] clean up --- cmd/gossamer/commands/root.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/cmd/gossamer/commands/root.go b/cmd/gossamer/commands/root.go index 7d8be85f60..c10cd958e9 100644 --- a/cmd/gossamer/commands/root.go +++ b/cmd/gossamer/commands/root.go @@ -79,8 +79,6 @@ Usage: gossamer --chain kusama --key charlie --port 7004 gossamer --chain polkadot --key dave --port 7005`, RunE: func(cmd *cobra.Command, args []string) error { - fmt.Printf("config.LogLevel => \n%+v\n\n", config.LogLevel) - fmt.Printf("config.Log => \n%+v\n\n", config.Log) return execRoot(cmd) }, PersistentPreRunE: func(cmd *cobra.Command, args []string) (err error) { From bec317aa8968634416587ab3a7204ca07fbc2a44 Mon Sep 17 00:00:00 2001 From: axaysagathiya Date: Fri, 9 Jun 2023 19:48:23 +0530 Subject: [PATCH 08/13] add short flag for log --- cmd/gossamer/commands/root.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/gossamer/commands/root.go b/cmd/gossamer/commands/root.go index c10cd958e9..9d6fc745fa 100644 --- a/cmd/gossamer/commands/root.go +++ b/cmd/gossamer/commands/root.go @@ -168,7 +168,7 @@ func addRootFlags(cmd *cobra.Command) error { } // Log Config - cmd.Flags().StringVar(&logLevel, "log", "", + cmd.Flags().StringVarP(&logLevel, "log", "l", "", `Set a logging filter. Syntax is a list of 'module=logLevel' (comma separated) e.g. --log sync=debug,core=trace From 5fe27dbf71c5dee3bd6a71099e2d3e4a01d1648c Mon Sep 17 00:00:00 2001 From: axaysagathiya Date: Sat, 10 Jun 2023 13:19:58 +0530 Subject: [PATCH 09/13] move logParse func to utils --- cmd/gossamer/commands/root.go | 56 ++-------------------------------- cmd/gossamer/commands/utils.go | 52 +++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+), 54 deletions(-) diff --git a/cmd/gossamer/commands/root.go b/cmd/gossamer/commands/root.go index 9d6fc745fa..22fbcddf54 100644 --- a/cmd/gossamer/commands/root.go +++ b/cmd/gossamer/commands/root.go @@ -4,10 +4,8 @@ package commands import ( - "encoding/json" "fmt" "os" - "strings" "github.com/ChainSafe/gossamer/dot" @@ -168,10 +166,11 @@ func addRootFlags(cmd *cobra.Command) error { } // Log Config - cmd.Flags().StringVarP(&logLevel, "log", "l", "", + cmd.PersistentFlags().StringVarP(&logLevel, "log", "l", "", `Set a logging filter. Syntax is a list of 'module=logLevel' (comma separated) e.g. --log sync=debug,core=trace + Modules are global, core, digest, sync, network, rpc, state, runtime, babe, grandpa, wasmer. Log levels (least to most verbose) are error, warn, info, debug, and trace. By default, all modules log 'info'. The global log level can be set with --log global=debug`) @@ -266,57 +265,6 @@ Expected format is 'URL VERBOSITY', e.g. ''--telemetry-url wss://foo/bar:0, wss: return nil } -func parseLogLevel() error { - // set default log level - moduleToLogLevel := map[string]string{ - "global": cfg.DefaultLogLevel, - "core": cfg.DefaultLogLevel, - "digest": cfg.DefaultLogLevel, - "sync": cfg.DefaultLogLevel, - "network": cfg.DefaultLogLevel, - "rpc": cfg.DefaultLogLevel, - "state": cfg.DefaultLogLevel, - "runtime": cfg.DefaultLogLevel, - "babe": cfg.DefaultLogLevel, - "grandpa": cfg.DefaultLogLevel, - "wasmer": cfg.DefaultLogLevel, - } - - if len(logLevel) > 0 { - logConfigurations := strings.Split(logLevel, ",") - - for _, config := range logConfigurations { - parts := strings.SplitN(config, "=", 2) - if len(parts) != 2 { - return fmt.Errorf("Invalid log configuration: %s", config) - } - - module := strings.TrimSpace(parts[0]) - logLevel := strings.TrimSpace(parts[1]) - - if _, ok := moduleToLogLevel[module]; !ok { - return fmt.Errorf("Invalid module: %s", module) - } - - moduleToLogLevel[module] = logLevel - } - } - - config.LogLevel = moduleToLogLevel["global"] - - jsonData, err := json.Marshal(moduleToLogLevel) - if err != nil { - return fmt.Errorf("Error marshalling logs: %s", err) - } - - err = json.Unmarshal(jsonData, &config.Log) - if err != nil { - return fmt.Errorf("Error unmarshalling logs: %s", err) - } - - return nil -} - // addAccountFlags adds account flags and binds to viper func addAccountFlags(cmd *cobra.Command) error { cmd.PersistentFlags().StringVar(&key, diff --git a/cmd/gossamer/commands/utils.go b/cmd/gossamer/commands/utils.go index a06ccdf94f..079a45ad7b 100644 --- a/cmd/gossamer/commands/utils.go +++ b/cmd/gossamer/commands/utils.go @@ -4,6 +4,7 @@ package commands import ( + "encoding/json" "fmt" "os" "path/filepath" @@ -481,3 +482,54 @@ func setViperDefault(config *cfg.Config) { } } } + +func parseLogLevel() error { + // set default log level + moduleToLogLevel := map[string]string{ + "global": cfg.DefaultLogLevel, + "core": cfg.DefaultLogLevel, + "digest": cfg.DefaultLogLevel, + "sync": cfg.DefaultLogLevel, + "network": cfg.DefaultLogLevel, + "rpc": cfg.DefaultLogLevel, + "state": cfg.DefaultLogLevel, + "runtime": cfg.DefaultLogLevel, + "babe": cfg.DefaultLogLevel, + "grandpa": cfg.DefaultLogLevel, + "wasmer": cfg.DefaultLogLevel, + } + + if len(logLevel) > 0 { + logConfigurations := strings.Split(logLevel, ",") + + for _, config := range logConfigurations { + parts := strings.SplitN(config, "=", 2) + if len(parts) != 2 { + return fmt.Errorf("Invalid log configuration: %s", config) + } + + module := strings.TrimSpace(parts[0]) + logLevel := strings.TrimSpace(parts[1]) + + if _, ok := moduleToLogLevel[module]; !ok { + return fmt.Errorf("Invalid module: %s", module) + } + + moduleToLogLevel[module] = logLevel + } + } + + config.LogLevel = moduleToLogLevel["global"] + + jsonData, err := json.Marshal(moduleToLogLevel) + if err != nil { + return fmt.Errorf("Error marshalling logs: %s", err) + } + + err = json.Unmarshal(jsonData, &config.Log) + if err != nil { + return fmt.Errorf("Error unmarshalling logs: %s", err) + } + + return nil +} From 79111f9c61d8edfae4e0c178d18f74e9179f5979 Mon Sep 17 00:00:00 2001 From: axaysagathiya Date: Sat, 10 Jun 2023 21:28:15 +0530 Subject: [PATCH 10/13] typo --- cmd/gossamer/commands/utils.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/gossamer/commands/utils.go b/cmd/gossamer/commands/utils.go index 079a45ad7b..0bb2465ce9 100644 --- a/cmd/gossamer/commands/utils.go +++ b/cmd/gossamer/commands/utils.go @@ -523,12 +523,12 @@ func parseLogLevel() error { jsonData, err := json.Marshal(moduleToLogLevel) if err != nil { - return fmt.Errorf("Error marshalling logs: %s", err) + return fmt.Errorf("error marshalling logs: %s", err) } err = json.Unmarshal(jsonData, &config.Log) if err != nil { - return fmt.Errorf("Error unmarshalling logs: %s", err) + return fmt.Errorf("error unmarshalling logs: %s", err) } return nil From f763cf3f397fc6bf508ac81127aed4cda5f44b7f Mon Sep 17 00:00:00 2001 From: axaysagathiya Date: Thu, 15 Jun 2023 11:38:31 +0530 Subject: [PATCH 11/13] Set the parsed log config to viper --- cmd/gossamer/commands/root.go | 8 ++++---- cmd/gossamer/commands/utils.go | 9 +++++---- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/cmd/gossamer/commands/root.go b/cmd/gossamer/commands/root.go index 22fbcddf54..140fc2fc97 100644 --- a/cmd/gossamer/commands/root.go +++ b/cmd/gossamer/commands/root.go @@ -117,6 +117,10 @@ Usage: } } + if err := parseLogLevel(); err != nil { + return fmt.Errorf("failed to configure log level: %s", err) + } + if cmd.Name() == "gossamer" { if err := configureViper(config.BasePath); err != nil { return fmt.Errorf("failed to configure viper: %s", err) @@ -131,10 +135,6 @@ Usage: } } - if err := parseLogLevel(); err != nil { - return fmt.Errorf("failed to configure log level: %s", err) - } - return nil }, SilenceErrors: true, diff --git a/cmd/gossamer/commands/utils.go b/cmd/gossamer/commands/utils.go index 0bb2465ce9..bfd5b72fbc 100644 --- a/cmd/gossamer/commands/utils.go +++ b/cmd/gossamer/commands/utils.go @@ -499,9 +499,8 @@ func parseLogLevel() error { "wasmer": cfg.DefaultLogLevel, } - if len(logLevel) > 0 { + if logLevel != "" { logConfigurations := strings.Split(logLevel, ",") - for _, config := range logConfigurations { parts := strings.SplitN(config, "=", 2) if len(parts) != 2 { @@ -514,22 +513,24 @@ func parseLogLevel() error { if _, ok := moduleToLogLevel[module]; !ok { return fmt.Errorf("Invalid module: %s", module) } - moduleToLogLevel[module] = logLevel } } + // set global log level config.LogLevel = moduleToLogLevel["global"] + viper.Set("log-level", config.LogLevel) + // set config.Log jsonData, err := json.Marshal(moduleToLogLevel) if err != nil { return fmt.Errorf("error marshalling logs: %s", err) } - err = json.Unmarshal(jsonData, &config.Log) if err != nil { return fmt.Errorf("error unmarshalling logs: %s", err) } + viper.Set("log", config.Log) return nil } From ab13ce023e930abedf4d9ed82a9b12bf2f09f3b4 Mon Sep 17 00:00:00 2001 From: axaysagathiya Date: Thu, 15 Jun 2023 13:39:44 +0530 Subject: [PATCH 12/13] clean up --- cmd/gossamer/commands/root.go | 5 +++-- cmd/gossamer/commands/utils.go | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/cmd/gossamer/commands/root.go b/cmd/gossamer/commands/root.go index 140fc2fc97..ba3489f917 100644 --- a/cmd/gossamer/commands/root.go +++ b/cmd/gossamer/commands/root.go @@ -26,8 +26,9 @@ var ( // Flag values for the root command which needs type conversion var ( + logLevel string + // Base Config - logLevel string pruning string telemetryURLs string @@ -118,7 +119,7 @@ Usage: } if err := parseLogLevel(); err != nil { - return fmt.Errorf("failed to configure log level: %s", err) + return fmt.Errorf("failed to parse log level: %s", err) } if cmd.Name() == "gossamer" { diff --git a/cmd/gossamer/commands/utils.go b/cmd/gossamer/commands/utils.go index bfd5b72fbc..aab2c8baf4 100644 --- a/cmd/gossamer/commands/utils.go +++ b/cmd/gossamer/commands/utils.go @@ -504,14 +504,14 @@ func parseLogLevel() error { for _, config := range logConfigurations { parts := strings.SplitN(config, "=", 2) if len(parts) != 2 { - return fmt.Errorf("Invalid log configuration: %s", config) + return fmt.Errorf("invalid log configuration: %s", config) } module := strings.TrimSpace(parts[0]) logLevel := strings.TrimSpace(parts[1]) if _, ok := moduleToLogLevel[module]; !ok { - return fmt.Errorf("Invalid module: %s", module) + return fmt.Errorf("invalid module: %s", module) } moduleToLogLevel[module] = logLevel } From 30afdec8836b1b39c6cf253555b9b73cc1c6c117 Mon Sep 17 00:00:00 2001 From: axaysagathiya Date: Fri, 23 Jun 2023 14:08:16 +0530 Subject: [PATCH 13/13] modify Docs --- cmd/gossamer/README.md | 8 +++++++- docs/docs/testing-and-debugging/debugging.md | 4 ++-- docs/docs/usage/command-line.md | 17 +++++++---------- 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/cmd/gossamer/README.md b/cmd/gossamer/README.md index d0574fb187..e27e878603 100644 --- a/cmd/gossamer/README.md +++ b/cmd/gossamer/README.md @@ -75,7 +75,13 @@ Here are the list of basic flags for the `gossamer` command: --key: The keypair to use for the node. --name: The name of the node. --id: The id of the node. ---log-level: The global log level. Supported levels are `crit`, `error`, `warn`, `info`, `debug` and `trace`. +--log: Set a logging filter. + Syntax is a list of 'module=logLevel' (comma separated) + e.g. --log sync=debug,core=trace + Modules are global, core, digest, sync, network, rpc, state, runtime, babe, grandpa, wasmer. + Log levels (least to most verbose) are error, warn, info, debug, and trace. + By default, all modules log 'info'. + The global log level can be set with --log global=debug --prometheus-port: The port to expose prometheus metrics. --retain-blocks: retain number of block from latest block while pruning --pruning: The pruning strategy to use. Supported strategiey: `archive` diff --git a/docs/docs/testing-and-debugging/debugging.md b/docs/docs/testing-and-debugging/debugging.md index abfe18c2d9..7103b67da0 100644 --- a/docs/docs/testing-and-debugging/debugging.md +++ b/docs/docs/testing-and-debugging/debugging.md @@ -22,7 +22,7 @@ grandpa = "trace | debug | info | warn | error | crit" ``` ## Logging Global Flags -```--log value Supports levels crit (silent) to trce (trace) (default: "info")``` +```--log global=value Supports levels crit (silent) to trce (trace) (default: "info")``` ## Running node with log level as `DEBUG` -```./bin/gossamer --config chain/gssmr/config.toml --log debug``` +```./bin/gossamer --config chain/gssmr/config.toml --log global=debug``` diff --git a/docs/docs/usage/command-line.md b/docs/docs/usage/command-line.md index e919c6d4d8..33dbf3b7e2 100644 --- a/docs/docs/usage/command-line.md +++ b/docs/docs/usage/command-line.md @@ -23,17 +23,14 @@ These are the flags that can be used with the `gossamer` command --help help for gossamer --id Identifier used to identify this node in the network --key Key to use for the node ---lbabe Log level for BABE module (default 'info') ---lcore Log level for core module (default 'info') ---ldigest Log level for digest module (default 'info') ---lgrandpa Log level for GRANDPA module (default 'info') --listen-addr Overrides the listen address used for peer to peer networking ---lnetwork Log level for network module (default 'info') ---log Global log level (default 'info') ---lrpc Log level for RPC module (default 'info') ---lruntime Log level for runtime module (default 'info') ---lstate Log level for state module (default 'info') ---lsync Log level for sync module (default 'info') +--log: Set a logging filter. + Syntax is a list of 'module=logLevel' (comma separated) + e.g. --log sync=debug,core=trace + Modules are global, core, digest, sync, network, rpc, state, runtime, babe, grandpa, wasmer. + Log levels (least to most verbose) are error, warn, info, debug, and trace. + By default, all modules log 'info'. + The global log level can be set with --log global=debug --max-peers Maximum number of peers to connect to (default 50) --min-peers Minimum number of peers to connect to (default 5) --name Name of the node