Files
Pierluigi LenociandHidetake Iwata 99b62352ea fix: honor -stderrthreshold when -logtostderr=true (#1556)
klog v2 defaults -logtostderr to true, which silently ignores
-stderrthreshold — all severities are unconditionally sent to stderr.

Opt into the fixed behavior introduced in klog v2.140.0 by setting
legacy_stderr_threshold_behavior=false so that -stderrthreshold is
respected. The default is set to INFO (preserving current behavior);
users can now override it on the command line.

Ref: kubernetes/klog#212, kubernetes/klog#432

Signed-off-by: Pierluigi Lenoci <pierluigi.lenoci@gmail.com>
Signed-off-by: Pierluigi Lenoci <pierluigilenoci@gmail.com>
Co-authored-by: Hidetake Iwata <int128@gmail.com>
2026-05-30 16:26:02 +09:00

66 lines
1.4 KiB
Go

package logger
import (
"flag"
"log"
"os"
"github.com/google/wire"
"github.com/spf13/pflag"
"k8s.io/klog/v2"
)
// Set provides an implementation and interface for Logger.
var Set = wire.NewSet(
New,
)
// New returns a Logger with the standard log.Logger and klog.
func New() Interface {
return &Logger{
goLogger: log.New(os.Stderr, "", 0),
}
}
type Interface interface {
AddFlags(f *pflag.FlagSet)
Printf(format string, args ...interface{})
V(level int) Verbose
IsEnabled(level int) bool
}
type Verbose interface {
Infof(format string, args ...interface{})
}
type goLogger interface {
Printf(format string, v ...interface{})
}
// Logger provides logging facility using log.Logger and klog.
type Logger struct {
goLogger
}
// AddFlags adds the flags such as -v.
func (*Logger) AddFlags(f *pflag.FlagSet) {
gf := flag.NewFlagSet("", flag.ContinueOnError)
klog.InitFlags(gf)
// Opt into the new klog behavior so that -stderrthreshold is honored even
// when -logtostderr=true (the default).
// Ref: kubernetes/klog#212, kubernetes/klog#432
_ = gf.Set("legacy_stderr_threshold_behavior", "false")
_ = gf.Set("stderrthreshold", "INFO")
f.AddGoFlagSet(gf)
}
// V returns a logger enabled only if the level is enabled.
func (*Logger) V(level int) Verbose {
return klog.V(klog.Level(level))
}
// IsEnabled returns true if the level is enabled.
func (*Logger) IsEnabled(level int) bool {
return klog.V(klog.Level(level)).Enabled()
}