From a418587c5bcce0fa4eb1177eb989ef56571de93c Mon Sep 17 00:00:00 2001 From: Patrick Ohly Date: Wed, 8 Feb 2023 15:00:20 +0100 Subject: [PATCH] textlogger: verbosity changes through public API 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. --- ktesting/testinglogger.go | 3 +++ textlogger/options.go | 24 +++++++++++++++++++----- textlogger/textlogger.go | 5 ++++- 3 files changed, 26 insertions(+), 6 deletions(-) diff --git a/ktesting/testinglogger.go b/ktesting/testinglogger.go index 434b1533c..14a22bf40 100644 --- a/ktesting/testinglogger.go +++ b/ktesting/testinglogger.go @@ -107,6 +107,9 @@ var _ TL = &BufferTL{} // that output will be printed via the global klog logger with // ` 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 diff --git a/textlogger/options.go b/textlogger/options.go index 5803ccecb..db4cbebdc 100644 --- a/textlogger/options.go +++ b/textlogger/options.go @@ -36,8 +36,22 @@ import ( // Notice: This type is EXPERIMENTAL and may be changed or removed in a // later release. type Config struct { - *verbosity.VState - co configOptions + 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. @@ -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", @@ -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 } @@ -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") } diff --git a/textlogger/textlogger.go b/textlogger/textlogger.go index be946e0f5..87029c2c2 100644 --- a/textlogger/textlogger.go +++ b/textlogger/textlogger.go @@ -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 @@ -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{}) {