Skip to content

respect NoColor setting in defaultLogEntry.Panic()#1061

Closed
ImpulseB23 wants to merge 1 commit into
go-chi:masterfrom
ImpulseB23:fix/panic-nocolor
Closed

respect NoColor setting in defaultLogEntry.Panic()#1061
ImpulseB23 wants to merge 1 commit into
go-chi:masterfrom
ImpulseB23:fix/panic-nocolor

Conversation

@ImpulseB23

Copy link
Copy Markdown

Fixes #1042.

defaultLogEntry.Panic() called PrintPrettyStack() which hardcodes useColor = true, ignoring the formatter's NoColor setting.

Copilot AI review requested due to automatic review settings March 14, 2026 23:17

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR fixes issue #1042 by ensuring panic stack traces emitted via defaultLogEntry.Panic() honor the DefaultLogFormatter.NoColor setting, rather than always forcing colored output.

Changes:

  • Refactors pretty stack printing to accept a useColor flag.
  • Updates defaultLogEntry.Panic() to propagate the formatter’s color preference into stack printing.
  • Adds a regression test to ensure no ANSI escape codes are emitted when NoColor is set.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 1 comment.

File Description
middleware/recoverer.go Introduces a color-aware internal stack printer and threads useColor into parsing/formatting.
middleware/logger.go Passes the log entry’s computed useColor into pretty stack printing from Panic().
middleware/recoverer_test.go Adds a test validating NoColor disables ANSI escapes in panic output.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread middleware/logger.go
@@ -160,7 +160,7 @@ func (l *defaultLogEntry) Write(status, bytes int, header http.Header, elapsed t
}

func (l *defaultLogEntry) Panic(v interface{}, stack []byte) {

@themavik themavik left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Threading useColor from defaultLogEntry into printPrettyStack fixes NoColor being ignored on panic paths. nit: exported PrintPrettyStack still hard-codes color (printPrettyStack(rvr, true)); mention that in the PR text so callers know only the logger path respects NoColor.

VojtechVitek added a commit that referenced this pull request Jul 5, 2026
…1131)

* middleware: honour NoColor in defaultLogEntry.Panic

defaultLogEntry.Panic called PrintPrettyStack unconditionally, which
always used ANSI colour codes regardless of the DefaultLogFormatter's
NoColor field.

Add PrintPrettyStackColor(rvr, useColor bool) and thread the flag
through prettyStack.parse. PrintPrettyStack now delegates to it with
useColor=true so existing callers are unaffected. defaultLogEntry.Panic
passes l.useColor so the panic output respects the same flag that
controls the rest of the request log.

Fixes #1042

Signed-off-by: alliasgher <alliasgher123@gmail.com>

* middleware: keep color-aware stack printer unexported

Address review: only defaultLogEntry.Panic needs the useColor variant
and it lives in the same package, so PrintPrettyStackColor does not need
to be exported. Rename it to printPrettyStack; the public PrintPrettyStack
API is unchanged.

Signed-off-by: alliasgher <alliasgher123@gmail.com>

* middleware: harden TestRecovererNoColor to actually guard the regression

Force IsTTY=true so cW would emit ANSI codes if useColor were true.
Without it the assertion is a no-op on non-TTY runners (e.g. CI) and
passes even against the buggy code path. Supersedes #1061.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

---------

Signed-off-by: alliasgher <alliasgher123@gmail.com>
Co-authored-by: alliasgher <alliasgher123@gmail.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@VojtechVitek

Copy link
Copy Markdown
Contributor

Hi, #1042 was fixed via #1050 + #1131.

Thanks for your contribution.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

middleware.Logger: defaultLogEntry.Panic() does not respect 'NoColor' of DefaultLogFormatter

4 participants