influxdb/kit/cli/loglevelflag.go

43 lines
1.2 KiB
Go

package cli
import (
"fmt"
"github.com/spf13/pflag"
"go.uber.org/zap/zapcore"
)
type levelValue zapcore.Level
func newLevelValue(val zapcore.Level, p *zapcore.Level) *levelValue {
*p = val
return (*levelValue)(p)
}
func (l *levelValue) String() string {
return zapcore.Level(*l).String()
}
func (l *levelValue) Set(s string) error {
var level zapcore.Level
if err := level.Set(s); err != nil {
return fmt.Errorf("unknown log level; supported levels are debug, info, warn, error")
}
*l = levelValue(level)
return nil
}
func (l *levelValue) Type() string {
return "Log-Level"
}
// LevelVar defines a zapcore.Level flag with specified name, default value, and usage string.
// The argument p points to a zapcore.Level variable in which to store the value of the flag.
func LevelVar(fs *pflag.FlagSet, p *zapcore.Level, name string, value zapcore.Level, usage string) {
LevelVarP(fs, p, name, "", value, usage)
}
// LevelVarP is like LevelVar, but accepts a shorthand letter that can be used after a single dash.
func LevelVarP(fs *pflag.FlagSet, p *zapcore.Level, name, shorthand string, value zapcore.Level, usage string) {
fs.VarP(newLevelValue(value, p), name, shorthand, usage)
}