From 45cf61b1276b2cf79ce0147df8fa48c96e8e5356 Mon Sep 17 00:00:00 2001 From: Francis Lavoie Date: Tue, 3 Mar 2026 16:44:42 -0500 Subject: [PATCH] logging: Ensure `slog` error level logs don't print stack traces (#7512) --- caddytest/integration/acme_test.go | 4 ++-- cmd/main.go | 8 +++++++- context.go | 11 ++++++++--- 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/caddytest/integration/acme_test.go b/caddytest/integration/acme_test.go index f10aef6a8..5473f9a81 100644 --- a/caddytest/integration/acme_test.go +++ b/caddytest/integration/acme_test.go @@ -51,7 +51,7 @@ func TestACMEServerWithDefaults(t *testing.T) { Client: &acme.Client{ Directory: "https://acme.localhost:9443/acme/local/directory", HTTPClient: tester.Client, - Logger: slog.New(zapslog.NewHandler(logger.Core())), + Logger: slog.New(zapslog.NewHandler(logger.Core(), zapslog.WithName("acmez"))), }, ChallengeSolvers: map[string]acmez.Solver{ acme.ChallengeTypeHTTP01: &naiveHTTPSolver{logger: logger}, @@ -120,7 +120,7 @@ func TestACMEServerWithMismatchedChallenges(t *testing.T) { Client: &acme.Client{ Directory: "https://acme.localhost:9443/acme/local/directory", HTTPClient: tester.Client, - Logger: slog.New(zapslog.NewHandler(logger.Core())), + Logger: slog.New(zapslog.NewHandler(logger.Core(), zapslog.WithName("acmez"))), }, ChallengeSolvers: map[string]acmez.Solver{ acme.ChallengeTypeHTTP01: &naiveHTTPSolver{logger: logger}, diff --git a/cmd/main.go b/cmd/main.go index 4a969573e..07666072f 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -484,7 +484,13 @@ func setResourceLimits(logger *zap.Logger) func() { // See https://pkg.go.dev/runtime/debug#SetMemoryLimit _, _ = memlimit.SetGoMemLimitWithOpts( memlimit.WithLogger( - slog.New(zapslog.NewHandler(logger.Core())), + slog.New(zapslog.NewHandler( + logger.Core(), + zapslog.WithName("memlimit"), + // the default enables traces at ERROR level, this disables + // them by setting it to a level higher than any other level + zapslog.AddStacktraceAt(slog.Level(127)), + )), ), memlimit.WithProvider( memlimit.ApplyFallback( diff --git a/context.go b/context.go index 095598682..a12cdcad4 100644 --- a/context.go +++ b/context.go @@ -608,6 +608,11 @@ func (ctx Context) Slogger() *slog.Logger { core zapcore.Core moduleID string ) + + // the default enables traces at ERROR level, this disables + // them by setting it to a level higher than any other level + tracesOpt := zapslog.AddStacktraceAt(slog.Level(127)) + if ctx.cfg == nil { // often the case in tests; just use a dev logger l, err := zap.NewDevelopment() @@ -616,16 +621,16 @@ func (ctx Context) Slogger() *slog.Logger { } core = l.Core() - handler = zapslog.NewHandler(core) + handler = zapslog.NewHandler(core, tracesOpt) } else { mod := ctx.Module() if mod == nil { core = Log().Core() - handler = zapslog.NewHandler(core) + handler = zapslog.NewHandler(core, tracesOpt) } else { moduleID = string(mod.CaddyModule().ID) core = ctx.cfg.Logging.Logger(mod).Core() - handler = zapslog.NewHandler(core, zapslog.WithName(moduleID)) + handler = zapslog.NewHandler(core, zapslog.WithName(moduleID), tracesOpt) } }