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