From 400fef9358db6cfc314cbdca86533a8b020f78b7 Mon Sep 17 00:00:00 2001 From: Mattias Karlsson Date: Tue, 25 Nov 2025 22:46:04 +0100 Subject: [PATCH] (GH-4662) Fix colorization of console log output * background color should be added for single argument too * fixes #4662 --- .../Unit/Diagnostics/CakeBuildLogTests.cs | 2 +- .../Console/AnsiConsoleRenderer.cs | 36 +++++++------------ 2 files changed, 13 insertions(+), 25 deletions(-) diff --git a/src/Cake.Core.Tests/Unit/Diagnostics/CakeBuildLogTests.cs b/src/Cake.Core.Tests/Unit/Diagnostics/CakeBuildLogTests.cs index 90704ded20..e783430e90 100644 --- a/src/Cake.Core.Tests/Unit/Diagnostics/CakeBuildLogTests.cs +++ b/src/Cake.Core.Tests/Unit/Diagnostics/CakeBuildLogTests.cs @@ -98,7 +98,7 @@ public void Should_Not_Colorize_A_Log_Message_Containg_A_Single_Token() // Then Assert.Single(console.Messages); - Assert.Equal("Hello World", console.Messages[0]); + Assert.Equal("\u001b[37;1mHello World\u001b[0m", console.Messages[0]); } [Theory] diff --git a/src/Cake.Core/Diagnostics/Console/AnsiConsoleRenderer.cs b/src/Cake.Core/Diagnostics/Console/AnsiConsoleRenderer.cs index 1383f6448f..45ec72e259 100644 --- a/src/Cake.Core/Diagnostics/Console/AnsiConsoleRenderer.cs +++ b/src/Cake.Core/Diagnostics/Console/AnsiConsoleRenderer.cs @@ -68,37 +68,25 @@ public AnsiConsoleRenderer(IConsole console) public void Render(LogLevel level, string format, params object[] args) { var palette = _palette[level]; - var tokens = FormatParser.Parse(format); - - var colorize = !"{0}".Equals(format, StringComparison.Ordinal); + var (tokens, tokenArgs) = "{0}".Equals(format, StringComparison.Ordinal) + ? ([ + new LiteralToken(string.Format(format, args)) + ], + []) + : (FormatParser.Parse(format), args); foreach (var token in tokens) { - if (colorize) - { - var colorEscapeCode = GetColorEscapeCode(token, palette); - var content = token.Render(args); + var colorEscapeCode = GetColorEscapeCode(token, palette); + var content = token.Render(tokenArgs); - if (level > LogLevel.Error) - { - _console.Write("{0}", $"{colorEscapeCode}{content}{ResetEscapeCode}"); - } - else - { - _console.WriteError("{0}", $"{colorEscapeCode}{content}{ResetEscapeCode}"); - } + if (level > LogLevel.Error) + { + _console.Write("{0}", $"{colorEscapeCode}{content}{ResetEscapeCode}"); } else { - // Render without colorization. - if (level > LogLevel.Error) - { - _console.Write("{0}", token.Render(args)); - } - else - { - _console.WriteError("{0}", token.Render(args)); - } + _console.WriteError("{0}", $"{colorEscapeCode}{content}{ResetEscapeCode}"); } }