diff --git a/staging/src/k8s.io/component-base/logs/example/cmd/logger.go b/staging/src/k8s.io/component-base/logs/example/cmd/logger.go index f3d8e7c9dbb..a317208cbe7 100644 --- a/staging/src/k8s.io/component-base/logs/example/cmd/logger.go +++ b/staging/src/k8s.io/component-base/logs/example/cmd/logger.go @@ -54,6 +54,8 @@ func NewLoggerCommand() *cobra.Command { } func runLogger() { + fmt.Println("This is normal output via stdout.") + fmt.Fprintln(os.Stderr, "This is other output via stderr.") klog.Infof("Log using Infof, key: %s", "value") klog.InfoS("Log using InfoS", "key", "value") err := errors.New("fail") diff --git a/staging/src/k8s.io/component-base/logs/json/json.go b/staging/src/k8s.io/component-base/logs/json/json.go index 37983a1ba05..732057b3688 100644 --- a/staging/src/k8s.io/component-base/logs/json/json.go +++ b/staging/src/k8s.io/component-base/logs/json/json.go @@ -93,6 +93,7 @@ var _ registry.LogFormatFactory = Factory{} func (f Factory) Create(options config.FormatOptions) (logr.Logger, func()) { if options.JSON.SplitStream { + // stdout for info messages, stderr for errors. infoStream := zapcore.Lock(os.Stdout) size := options.JSON.InfoBufferSize.Value() if size > 0 { @@ -107,7 +108,9 @@ func (f Factory) Create(options config.FormatOptions) (logr.Logger, func()) { } return NewJSONLogger(infoStream, zapcore.Lock(os.Stderr)) } - out := zapcore.Lock(os.Stdout) + // The default is to write to stderr (same as in klog's text output, + // doesn't get mixed with normal program output). + out := zapcore.Lock(os.Stderr) return NewJSONLogger(out, out) }