Skip to content

Commit a5e9f7f

Browse files
Honor stderrthreshold when logtostderr is enabled (#2109)
* Honor stderrthreshold when logtostderr is enabled After calling klog.InitFlags, opt into the fixed stderrthreshold behavior added in klog v2.140.0 so that severe-enough messages are still mirrored to stderr when logtostderr is set. Reference: kubernetes/klog#212 Signed-off-by: Pierluigi Lenoci <pierluigi.lenoci@gmail.com> * fix: add error handling for flag.Set calls Address review feedback by wrapping flag.Set() calls with proper error checking instead of silently discarding errors. Signed-off-by: Pierluigi Lenoci <pierluigi.lenoci@gmail.com> * chore: re-trigger CLA check Signed-off-by: Pierluigi Lenoci <pierluigi.lenoci@gmail.com> * refactor: consolidate klog stderrthreshold flag init into ConfigureKlog helper Move the repeated legacy_stderr_threshold_behavior and stderrthreshold flag.Set calls into a single ConfigureKlog(fs *flag.FlagSet) helper in pkg/util/log/setup.go. All call sites now delegate to this helper, keeping the logic in one place and handling both the global flag.CommandLine and custom FlagSet cases. Signed-off-by: Pierluigi Lenoci <pierluigi.lenoci@gmail.com> --------- Signed-off-by: Pierluigi Lenoci <pierluigi.lenoci@gmail.com>
1 parent 6f66dc6 commit a5e9f7f

16 files changed

Lines changed: 306 additions & 166 deletions

File tree

cmd/junit-report/main.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import (
1919
"os"
2020

2121
"github.com/GoogleContainerTools/config-sync/cmd/junit-report/resetfailure"
22+
logutil "github.com/GoogleContainerTools/config-sync/pkg/util/log"
2223
"github.com/spf13/cobra"
2324
"k8s.io/klog/v2"
2425
)
@@ -36,6 +37,7 @@ func init() {
3637

3738
func main() {
3839
klog.InitFlags(nil)
40+
logutil.ConfigureKlog(nil)
3941
flag.Parse()
4042

4143
if err := rootCmd.Execute(); err != nil {

cmd/nomos/nomos.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import (
3030
"github.com/GoogleContainerTools/config-sync/cmd/nomos/vet"
3131
"github.com/GoogleContainerTools/config-sync/pkg/api/configmanagement"
3232
"github.com/GoogleContainerTools/config-sync/pkg/client/restconfig"
33+
logutil "github.com/GoogleContainerTools/config-sync/pkg/util/log"
3334
pkgversion "github.com/GoogleContainerTools/config-sync/pkg/version"
3435
_ "k8s.io/client-go/plugin/pkg/client/auth"
3536
"k8s.io/klog/v2"
@@ -70,6 +71,7 @@ func main() {
7071

7172
// Register klog flags
7273
klog.InitFlags(fs)
74+
logutil.ConfigureKlog(fs)
7375

7476
// Work around the controller-runtime init registering a --kubeconfig flag
7577
// with no default value. Use the same default as kubectl instead.

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ require (
5151
k8s.io/client-go v0.35.3
5252
k8s.io/cluster-registry v0.0.6
5353
k8s.io/code-generator v0.35.3
54-
k8s.io/klog/v2 v2.130.1
54+
k8s.io/klog/v2 v2.140.0
5555
k8s.io/kube-aggregator v0.35.3
5656
k8s.io/kube-openapi v0.0.0-20250910181357-589584f1c912
5757
k8s.io/kubectl v0.35.3

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -502,8 +502,8 @@ k8s.io/controller-manager v0.35.0 h1:KteodmfVIRzfZ3RDaxhnHb72rswBxEngvdL9vuZOA9A
502502
k8s.io/controller-manager v0.35.0/go.mod h1:1bVuPNUG6/dpWpevsJpXioS0E0SJnZ7I/Wqc9Awyzm4=
503503
k8s.io/gengo/v2 v2.0.0-20250922181213-ec3ebc5fd46b h1:gMplByicHV/TJBizHd9aVEsTYoJBnnUAT5MHlTkbjhQ=
504504
k8s.io/gengo/v2 v2.0.0-20250922181213-ec3ebc5fd46b/go.mod h1:CgujABENc3KuTrcsdpGmrrASjtQsWCT7R99mEV4U/fM=
505-
k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk=
506-
k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=
505+
k8s.io/klog/v2 v2.140.0 h1:Tf+J3AH7xnUzZyVVXhTgGhEKnFqye14aadWv7bzXdzc=
506+
k8s.io/klog/v2 v2.140.0/go.mod h1:o+/RWfJ6PwpnFn7OyAG3QnO47BFsymfEfrz6XyYSSp0=
507507
k8s.io/kube-aggregator v0.35.3 h1:erIo8Dfapd0Fg44XAbgCNioJMtr3Z5mI/G1PSpj9B7Q=
508508
k8s.io/kube-aggregator v0.35.3/go.mod h1:lOLyWTEuiKT2kS/Wkj0foq+P+Xt4gs/xkrhz2r33lAQ=
509509
k8s.io/kube-openapi v0.0.0-20250910181357-589584f1c912 h1:Y3gxNAuB0OBLImH611+UDZcmKS3g6CthxToOb37KgwE=

pkg/resourcegroup/controllers/log/setup.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ package log
1717
import (
1818
"flag"
1919

20+
logutil "github.com/GoogleContainerTools/config-sync/pkg/util/log"
2021
"k8s.io/klog/v2"
2122
"k8s.io/klog/v2/textlogger"
2223
ctrl "sigs.k8s.io/controller-runtime"
@@ -27,6 +28,7 @@ import (
2728
func InitFlags() {
2829
// Register klog flags
2930
klog.InitFlags(nil)
31+
logutil.ConfigureKlog(nil)
3032

3133
// Override klog default values
3234
if err := flag.Set("v", "1"); err != nil {

pkg/util/log/setup.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,36 @@ import (
2121
"k8s.io/klog/v2"
2222
)
2323

24+
// setFlag is a helper type that abstracts over the global flag.Set and
25+
// a custom flag.FlagSet.Set so that ConfigureKlog can work with both.
26+
type setFlag func(name, value string) error
27+
28+
// ConfigureKlog opts into the fixed stderrthreshold behavior introduced in
29+
// klog v2.140.0 (kubernetes/klog#212). Call this after klog.InitFlags and
30+
// before flag.Parse.
31+
//
32+
// If fs is nil the global flag.CommandLine is used; otherwise the provided
33+
// FlagSet is used. This keeps the logic in one place regardless of whether
34+
// the caller uses the global flags or a custom FlagSet.
35+
func ConfigureKlog(fs *flag.FlagSet) {
36+
var set setFlag
37+
if fs != nil {
38+
set = fs.Set
39+
} else {
40+
set = flag.Set
41+
}
42+
if err := set("legacy_stderr_threshold_behavior", "false"); err != nil {
43+
klog.Fatalf("Failed to set flag %q: %v", "legacy_stderr_threshold_behavior", err)
44+
}
45+
if err := set("stderrthreshold", "INFO"); err != nil {
46+
klog.Fatalf("Failed to set flag %q: %v", "stderrthreshold", err)
47+
}
48+
}
49+
2450
// Setup sets up default logging configs for Nomos applications and logs the preamble.
2551
func Setup() {
2652
klog.InitFlags(nil)
53+
ConfigureKlog(nil)
2754
if err := flag.Set("logtostderr", "true"); err != nil {
2855
klog.Fatal(err)
2956
}

vendor/k8s.io/klog/v2/README.md

Lines changed: 0 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/k8s.io/klog/v2/internal/serialize/keyvalues.go

Lines changed: 126 additions & 106 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)