Codebase list golang-github-go-kit-kit / 95a7937 log / levels.go
95a7937

Tree @95a7937 (Download .tar.gz)

levels.go @95a7937raw · history · blame

package log

// Levels provides a default set of leveled loggers.
type Levels struct {
	Debug Logger
	Info  Logger
	Error Logger
}

type levelOptions struct {
	levelKey   string
	debugValue string
	infoValue  string
	errorValue string
}

// LevelOption sets a parameter for leveled loggers.
type LevelOption func(*levelOptions)

// LevelKey sets the key for the field used to indicate log level. By default,
// the key is "level".
func LevelKey(key string) LevelOption {
	return func(o *levelOptions) { o.levelKey = key }
}

// DebugLevelValue sets the value for the field used to indicate the debug log
// level. By default, the value is "DEBUG".
func DebugLevelValue(value string) LevelOption {
	return func(o *levelOptions) { o.debugValue = value }
}

// InfoLevelValue sets the value for the field used to indicate the debug log
// level. By default, the value is "INFO".
func InfoLevelValue(value string) LevelOption {
	return func(o *levelOptions) { o.infoValue = value }
}

// ErrorLevelValue sets the value for the field used to indicate the debug log
// level. By default, the value is "ERROR".
func ErrorLevelValue(value string) LevelOption {
	return func(o *levelOptions) { o.errorValue = value }
}

// NewLevels returns a new set of leveled loggers based on the base logger.
func NewLevels(base Logger, options ...LevelOption) Levels {
	opts := &levelOptions{
		levelKey:   "level",
		debugValue: "DEBUG",
		infoValue:  "INFO",
		errorValue: "ERROR",
	}
	for _, option := range options {
		option(opts)
	}
	return Levels{
		Debug: With(base, opts.levelKey, opts.debugValue),
		Info:  With(base, opts.levelKey, opts.infoValue),
		Error: With(base, opts.levelKey, opts.errorValue),
	}
}