Merge pull request #114680 from pohly/log-go-flag-support

k8s.io/component-base/logs: fix usage through Go flag package
This commit is contained in:
Kubernetes Prow Robot 2023-01-18 14:48:54 -08:00 committed by GitHub
commit eff6b9f648
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 63 additions and 0 deletions

View File

@ -19,6 +19,7 @@ package v1
import (
"bytes"
"context"
"flag"
"testing"
"github.com/go-logr/logr"
@ -100,6 +101,59 @@ func TestOptions(t *testing.T) {
}
}
func TestFlagSet(t *testing.T) {
t.Run("pflag", func(t *testing.T) {
newOptions := NewLoggingConfiguration()
var fs pflag.FlagSet
AddFlags(newOptions, &fs)
var buffer bytes.Buffer
fs.SetOutput(&buffer)
fs.PrintDefaults()
// Expected (Go 1.19, pflag v1.0.5):
// --logging-format string Sets the log format. Permitted formats: "text". (default "text")
// --log-flush-frequency duration Maximum number of seconds between log flushes (default 5s)
// -v, --v Level number for the log level verbosity
// --vmodule pattern=N,... comma-separated list of pattern=N settings for file-filtered logging (only works for text log format)
assert.Regexp(t, `.*--logging-format.*default.*text.*
.*--log-flush-frequency.*default 5s.*
.*-v.*--v.*
.*--vmodule.*pattern=N.*
`, buffer.String())
})
t.Run("flag", func(t *testing.T) {
newOptions := NewLoggingConfiguration()
var pfs pflag.FlagSet
AddFlags(newOptions, &pfs)
var fs flag.FlagSet
pfs.VisitAll(func(f *pflag.Flag) {
fs.Var(f.Value, f.Name, f.Usage)
})
var buffer bytes.Buffer
fs.SetOutput(&buffer)
fs.PrintDefaults()
// Expected (Go 1.19):
// -log-flush-frequency value
// Maximum number of seconds between log flushes (default 5s)
// -logging-format value
// Sets the log format. Permitted formats: "text". (default text)
// -v value
// number for the log level verbosity
// -vmodule value
// comma-separated list of pattern=N settings for file-filtered logging (only works for text log format)
assert.Regexp(t, `.*-log-flush-frequency.*
.*default 5s.*
.*-logging-format.*
.*default.*text.*
.*-v.*
.*
.*-vmodule.*
.*
`, buffer.String())
})
}
func TestContextualLogging(t *testing.T) {
t.Run("enabled", func(t *testing.T) {
testContextualLogging(t, true)

View File

@ -36,6 +36,9 @@ type vmoduleConfigurationPFlag struct {
// String returns the -vmodule parameter (comma-separated list of pattern=N).
func (wrapper vmoduleConfigurationPFlag) String() string {
if wrapper.value == nil {
return ""
}
var patterns []string
for _, item := range *wrapper.value {
patterns = append(patterns, fmt.Sprintf("%s=%d", item.FilePattern, item.Verbosity))
@ -82,10 +85,16 @@ type verbosityLevelPflag struct {
}
func (wrapper verbosityLevelPflag) String() string {
if wrapper.value == nil {
return "0"
}
return strconv.FormatInt(int64(*wrapper.value), 10)
}
func (wrapper verbosityLevelPflag) Get() interface{} {
if wrapper.value == nil {
return VerbosityLevel(0)
}
return *wrapper.value
}