github.com/DFWallet/tendermint-cosmos@v0.0.2/libs/cli/flags/log_level.go (about) 1 package flags 2 3 import ( 4 "errors" 5 "fmt" 6 "strings" 7 8 "github.com/DFWallet/tendermint-cosmos/libs/log" 9 ) 10 11 const ( 12 defaultLogLevelKey = "*" 13 ) 14 15 // ParseLogLevel parses complex log level - comma-separated 16 // list of module:level pairs with an optional *:level pair (* means 17 // all other modules). 18 // 19 // Example: 20 // ParseLogLevel("consensus:debug,mempool:debug,*:error", log.NewTMLogger(os.Stdout), "info") 21 func ParseLogLevel(lvl string, logger log.Logger, defaultLogLevelValue string) (log.Logger, error) { 22 if lvl == "" { 23 return nil, errors.New("empty log level") 24 } 25 26 l := lvl 27 28 // prefix simple one word levels (e.g. "info") with "*" 29 if !strings.Contains(l, ":") { 30 l = defaultLogLevelKey + ":" + l 31 } 32 33 options := make([]log.Option, 0) 34 35 isDefaultLogLevelSet := false 36 var option log.Option 37 var err error 38 39 list := strings.Split(l, ",") 40 for _, item := range list { 41 moduleAndLevel := strings.Split(item, ":") 42 43 if len(moduleAndLevel) != 2 { 44 return nil, fmt.Errorf("expected list in a form of \"module:level\" pairs, given pair %s, list %s", item, list) 45 } 46 47 module := moduleAndLevel[0] 48 level := moduleAndLevel[1] 49 50 if module == defaultLogLevelKey { 51 option, err = log.AllowLevel(level) 52 if err != nil { 53 return nil, fmt.Errorf("failed to parse default log level (pair %s, list %s): %w", item, l, err) 54 } 55 options = append(options, option) 56 isDefaultLogLevelSet = true 57 } else { 58 switch level { 59 case "debug": 60 option = log.AllowDebugWith("module", module) 61 case "info": 62 option = log.AllowInfoWith("module", module) 63 case "error": 64 option = log.AllowErrorWith("module", module) 65 case "none": 66 option = log.AllowNoneWith("module", module) 67 default: 68 return nil, 69 fmt.Errorf("expected either \"info\", \"debug\", \"error\" or \"none\" log level, given %s (pair %s, list %s)", 70 level, 71 item, 72 list) 73 } 74 options = append(options, option) 75 76 } 77 } 78 79 // if "*" is not provided, set default global level 80 if !isDefaultLogLevelSet { 81 option, err = log.AllowLevel(defaultLogLevelValue) 82 if err != nil { 83 return nil, err 84 } 85 options = append(options, option) 86 } 87 88 return log.NewFilter(logger, options...), nil 89 }