pkg/xcontext/logger/internal/log_level.go (67 lines of code) (raw):

// Copyright (c) Facebook, Inc. and its affiliates. // // This source code is licensed under the MIT license found in the // LICENSE file in the root directory of this source tree. // Package internal of logger unifies different types of loggers into // interfaces Logger. For example it allows to upgrade simple fmt.Printf // to be a fully functional Logger. Therefore multiple wrappers are implemented // here to provide different functions which could be missing in some loggers. package internal import ( "fmt" "strings" ) // Level is used to define severity of messages to be reported. type Level int const ( // LevelUndefined is the erroneous value of log-level which corresponds // to zero-value. LevelUndefined = Level(iota) // LevelFatal will report about Fatalf-s only. LevelFatal // LevelPanic will report about Panicf-s and Fatalf-s only. LevelPanic // LevelError will report about Errorf-s, Panicf-s, ... LevelError // LevelWarning will report about Warningf-s, Errorf-s, ... LevelWarning // LevelInfo will report about Infof-s, Warningf-s, ... LevelInfo // LevelDebug will report about Debugf-s, Infof-s, ... LevelDebug ) // String just implements fmt.Stringer, flag.Value and pflag.Value. func (logLevel Level) String() string { switch logLevel { case LevelUndefined: return "undefined" case LevelDebug: return "debug" case LevelInfo: return "info" case LevelWarning: return "warning" case LevelError: return "error" case LevelPanic: return "panic" case LevelFatal: return "fatal" } return "unknown" } // Set updates the logging level values based on the passed string value. // This method just implements flag.Value and pflag.Value. func (logLevel *Level) Set(value string) error { newLogLevel, err := ParseLogLevel(value) if err != nil { return err } *logLevel = newLogLevel return nil } // Type just implements pflag.Value. func (logLevel *Level) Type() string { return "Level" } // ParseLogLevel parses incoming string into a Level and returns // LevelUndefined with an error if an unknown logging level was passed. func ParseLogLevel(in string) (Level, error) { switch strings.ToLower(in) { case "d", "debug": return LevelDebug, nil case "i", "info": return LevelInfo, nil case "w", "warn", "warning": return LevelWarning, nil case "e", "err", "error": return LevelError, nil case "p", "panic": return LevelPanic, nil case "f", "fatal": return LevelFatal, nil } var allowedValues []string for logLevel := LevelFatal; logLevel <= LevelDebug; logLevel++ { allowedValues = append(allowedValues, logLevel.String()) } return LevelUndefined, fmt.Errorf("unknown logging level '%s', known values are: %s", in, strings.Join(allowedValues, ", ")) }