Skip to content

Commit

Permalink
textlogger: verbosity changes through public API
Browse files Browse the repository at this point in the history
By embedding *verbosity.VState in Config, users of the package
already had access to V and VModule, but that had two drawbacks:
- not easy to discover
- unclean separate between internal and external API

Providing explicit functions is better.
  • Loading branch information
pohly committed Feb 8, 2023
1 parent 20807f9 commit 25b6573
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 5 deletions.
3 changes: 3 additions & 0 deletions ktesting/testinglogger.go
Expand Up @@ -107,6 +107,9 @@ var _ TL = &BufferTL{}
// that output will be printed via the global klog logger with
// `<test name> leaked goroutine` as prefix.
//
// Verbosity can be modified at any time through the Config.V and
// Config.VModule API.
//
// # Experimental
//
// Notice: This type is EXPERIMENTAL and may be changed or removed in a
Expand Down
22 changes: 18 additions & 4 deletions textlogger/options.go
Expand Up @@ -36,10 +36,24 @@ import (
// Notice: This type is EXPERIMENTAL and may be changed or removed in a
// later release.
type Config struct {
*verbosity.VState
vstate *verbosity.VState
co configOptions
}

// Verbosity returns a value instance that can be used to query (via String) or
// modify (via Set) the verbosity threshold. This is thread-safe and can be
// done at runtime.
func (c *Config) Verbosity() flag.Value {
return c.vstate.V()
}

// VModule returns a value instance that can be used to query (via String) or
// modify (via Set) the vmodule settings. This is thread-safe and can be done
// at runtime.
func (c *Config) VModule() flag.Value {
return c.vstate.VModule()
}

// ConfigOption implements functional parameters for NewConfig.
//
// # Experimental
Expand Down Expand Up @@ -111,7 +125,7 @@ func Output(output io.Writer) ConfigOption {
// later release.
func NewConfig(opts ...ConfigOption) *Config {
c := &Config{
VState: verbosity.New(),
vstate: verbosity.New(),
co: configOptions{
verbosityFlagName: "v",
vmoduleFlagName: "vmodule",
Expand All @@ -123,7 +137,7 @@ func NewConfig(opts ...ConfigOption) *Config {
opt(&c.co)
}

c.V().Set(strconv.FormatInt(int64(c.co.verbosityDefault), 10))
c.Verbosity().Set(strconv.FormatInt(int64(c.co.verbosityDefault), 10))
return c
}

Expand All @@ -134,6 +148,6 @@ func NewConfig(opts ...ConfigOption) *Config {
// Notice: This function is EXPERIMENTAL and may be changed or removed in a
// later release.
func (c *Config) AddFlags(fs *flag.FlagSet) {
fs.Var(c.V(), c.co.verbosityFlagName, "number for the log level verbosity of the testing logger")
fs.Var(c.Verbosity(), c.co.verbosityFlagName, "number for the log level verbosity of the testing logger")
fs.Var(c.VModule(), c.co.vmoduleFlagName, "comma-separated list of pattern=N log level settings for files matching the patterns")
}
5 changes: 4 additions & 1 deletion textlogger/textlogger.go
Expand Up @@ -50,6 +50,9 @@ var (

// NewLogger constructs a new logger.
//
// Verbosity can be modified at any time through the Config.V and
// Config.VModule API.
//
// # Experimental
//
// Notice: This function is EXPERIMENTAL and may be changed or removed in a
Expand Down Expand Up @@ -82,7 +85,7 @@ func (l *tlogger) WithCallDepth(depth int) logr.LogSink {
func (l *tlogger) Enabled(level int) bool {
// Skip this function and the Logger.Info call, then
// also any additional stack frames from WithCallDepth.
return l.config.Enabled(verbosity.Level(level), 2+l.callDepth)
return l.config.vstate.Enabled(verbosity.Level(level), 2+l.callDepth)
}

func (l *tlogger) Info(level int, msg string, kvList ...interface{}) {
Expand Down

0 comments on commit 25b6573

Please sign in to comment.