Skip to content

Commit 7fa245f

Browse files
Copilotdavidfowl
andauthored
Log DCP messages at Debug/Trace level in AppHost (#12533)
* Initial plan * Map DCP log levels to Debug/Trace in AppHost Co-authored-by: davidfowl <[email protected]> * Update src/Aspire.Hosting/Dcp/DcpHost.cs --------- Co-authored-by: copilot-swe-agent[bot] <[email protected]> Co-authored-by: davidfowl <[email protected]> Co-authored-by: David Fowler <[email protected]>
1 parent 572ed6c commit 7fa245f

File tree

2 files changed

+29
-2
lines changed

2 files changed

+29
-2
lines changed

src/Aspire.Hosting/Dcp/DcpHost.cs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,7 @@ private async Task LogSocketOutputAsync(Socket socket, CancellationToken cancell
276276
if (!DcpLogParser.TryParseDcpLog(line, out var parsedMessage, out var logLevel, out var category))
277277
{
278278
// If parsing fails, return a default logger and the line as-is
279-
return (_logger, LogLevel.Information, Encoding.UTF8.GetString(line));
279+
return (_logger, LogLevel.Debug, Encoding.UTF8.GetString(line));
280280
}
281281

282282
var hash = new HashCode();
@@ -290,7 +290,12 @@ private async Task LogSocketOutputAsync(Socket socket, CancellationToken cancell
290290
loggerCache[hashValue] = logger = _loggerFactory.CreateLogger($"Aspire.Hosting.Dcp.{category}");
291291
}
292292

293-
return (logger, logLevel, parsedMessage);
293+
// Map DCP log levels to Debug/Trace to reduce noise in AppHost output.
294+
// DCP errors are now flowing to resources and can be hidden from output,
295+
// so we log them at Debug or Trace level instead of using the original DCP log level.
296+
var appHostLogLevel = logLevel == LogLevel.Trace ? LogLevel.Trace : LogLevel.Debug;
297+
298+
return (logger, appHostLogLevel, parsedMessage);
294299
}
295300

296301
try

tests/Aspire.Hosting.Tests/Dcp/DcpLogParserTests.cs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,4 +215,26 @@ public void TryParseDcpLog_RealWorldExampleFromIssue_ParsesSuccessfully()
215215
Assert.Equal(LogLevel.Information, logLevel);
216216
Assert.Equal("dcpctrl.ExecutableReconciler", category);
217217
}
218+
219+
[Theory]
220+
[InlineData("error", LogLevel.Error)]
221+
[InlineData("warning", LogLevel.Warning)]
222+
[InlineData("info", LogLevel.Information)]
223+
[InlineData("debug", LogLevel.Debug)]
224+
[InlineData("trace", LogLevel.Trace)]
225+
public void TryParseDcpLog_ParsesAllLogLevels(string dcpLogLevel, LogLevel expectedLogLevel)
226+
{
227+
// Arrange
228+
var logLine = $"2023-09-19T20:40:50.509-0700\t{dcpLogLevel}\tdcpctrl.TestReconciler\tTest message";
229+
var bytes = Encoding.UTF8.GetBytes(logLine);
230+
231+
// Act
232+
var result = DcpLogParser.TryParseDcpLog(bytes.AsSpan(), out var message, out var logLevel, out var category);
233+
234+
// Assert
235+
Assert.True(result);
236+
Assert.Equal("Test message", message);
237+
Assert.Equal(expectedLogLevel, logLevel);
238+
Assert.Equal("dcpctrl.TestReconciler", category);
239+
}
218240
}

0 commit comments

Comments
 (0)