Skip to content

Commit 9b98559

Browse files
committed
Allow panic as an option to -zap-stacktrace-level"
This allows stack traces to be disabled for all but panic log entries. The Zap library doesn't have an option to completely disable stack traces.
1 parent 73c52e8 commit 9b98559

File tree

3 files changed

+16
-4
lines changed

3 files changed

+16
-4
lines changed

pkg/log/zap/flags.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,10 @@ var levelStrings = map[string]zapcore.Level{
3434
"error": zap.ErrorLevel,
3535
}
3636

37-
// TODO Add level to disable stacktraces.
38-
// https://github.com/kubernetes-sigs/controller-runtime/issues/1035
3937
var stackLevelStrings = map[string]zapcore.Level{
4038
"info": zap.InfoLevel,
4139
"error": zap.ErrorLevel,
40+
"panic": zap.PanicLevel,
4241
}
4342

4443
type encoderFlag struct {

pkg/log/zap/zap.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@ func NewRaw(opts ...Opts) *zap.Logger {
230230
// zap-encoder: Zap log encoding (one of 'json' or 'console')
231231
// zap-log-level: Zap Level to configure the verbosity of logging. Can be one of 'debug', 'info', 'error',
232232
// or any integer value > 0 which corresponds to custom debug levels of increasing verbosity")
233-
// zap-stacktrace-level: Zap Level at and above which stacktraces are captured (one of 'info' or 'error')
233+
// zap-stacktrace-level: Zap Level at and above which stacktraces are captured (one of 'info', 'error' or 'panic')
234234
func (o *Options) BindFlags(fs *flag.FlagSet) {
235235

236236
// Set Development mode value
@@ -260,7 +260,7 @@ func (o *Options) BindFlags(fs *flag.FlagSet) {
260260
o.StacktraceLevel = fromFlag
261261
}
262262
fs.Var(&stackVal, "zap-stacktrace-level",
263-
"Zap Level at and above which stacktraces are captured (one of 'info', 'error').")
263+
"Zap Level at and above which stacktraces are captured (one of 'info', 'error', 'panic').")
264264
}
265265

266266
// UseFlagOptions configures the logger to use the Options set by parsing zap option flags from the CLI.

pkg/log/zap/zap_test.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -423,6 +423,19 @@ var _ = Describe("Zap log level flag options setup", func() {
423423
Expect(out.StacktraceLevel.Enabled(zapcore.ErrorLevel)).To(BeTrue())
424424
})
425425

426+
It("Should output stacktrace at panic level, with development mode set to true.", func() {
427+
args := []string{"--zap-stacktrace-level=panic", "--zap-devel=true"}
428+
fromFlags.BindFlags(&fs)
429+
err := fs.Parse(args)
430+
Expect(err).ToNot(HaveOccurred())
431+
out := Options{}
432+
UseFlagOptions(&fromFlags)(&out)
433+
434+
Expect(out.StacktraceLevel.Enabled(zapcore.PanicLevel)).To(BeTrue())
435+
Expect(out.StacktraceLevel.Enabled(zapcore.ErrorLevel)).To(BeFalse())
436+
Expect(out.StacktraceLevel.Enabled(zapcore.InfoLevel)).To(BeFalse())
437+
})
438+
426439
})
427440

428441
Context("with only -zap-devel flag provided", func() {

0 commit comments

Comments
 (0)