Skip to content

Improve dashboard summary log formatting - #17595

Merged
David Fowler (davidfowl) merged 2 commits into
mainfrom
improve/dashboard-summary-formatting
May 29, 2026
Merged

Improve dashboard summary log formatting#17595
David Fowler (davidfowl) merged 2 commits into
mainfrom
improve/dashboard-summary-formatting

Conversation

@JamesNK

@JamesNK James Newton-King (JamesNK) commented May 28, 2026

Copy link
Copy Markdown
Member

Description

Improves the dashboard summary log output by making URL lines easier to scan and separating the container warning into its own log entry.

  • Adds indented bullet formatting (" - " prefix) for dashboard and OTLP URL lines to align with .NET console logger indentation
  • Emits the container access guidance as a separate LogInformation call instead of appending it to the summary template
  • Updates LoggingHelpersTests expectations for the new summary format
  • Updates FrontendBrowserTokenAuthTests.LogOutput_InContainer_LoginLinkContainerMessage to assert the new standalone container log message

Checklist

  • Is this feature complete?
    • Yes. Ready to ship.
    • No. Follow-up changes expected.
  • Are you including unit tests for the changes and scenario tests if relevant?
    • Yes
    • No
  • Did you add public API?
    • Yes
      • If yes, did you have an API Review for it?
        • Yes
        • No
      • Did you add <remarks /> and <code /> elements on your triple slash comments?
        • Yes
        • No
    • No
  • Does the change make any security assumptions or guarantees?
    • Yes
      • If yes, have you done a threat model and had a security review?
        • Yes
        • No
    • No

- Indent URL lines with 6 spaces and '- ' prefix so they align with
  the standard log output indentation
- Move container warning to a separate log message with clearer text
- Update tests to match new format
Copilot AI review requested due to automatic review settings May 28, 2026 11:37
@github-actions

github-actions Bot commented May 28, 2026

Copy link
Copy Markdown
Contributor

🚀 Dogfood this PR with:

⚠️ WARNING: Do not do this without first carefully reviewing the code of this PR to satisfy yourself it is safe.

curl -fsSL https://raw.githubusercontent.com/microsoft/aspire/main/eng/scripts/get-aspire-cli-pr.sh | bash -s -- 17595

Or

  • Run remotely in PowerShell:
iex "& { $(irm https://raw.githubusercontent.com/microsoft/aspire/main/eng/scripts/get-aspire-cli-pr.ps1) } 17595"

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Improves the dashboard summary log output by making URL lines easier to scan and separating the container warning into its own log entry.

Changes:

  • Adds indented bullet formatting for dashboard and OTLP URL lines.
  • Emits the container access guidance as a separate information log.
  • Updates LoggingHelpersTests expectations for the new summary format.

Reviewed changes

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

File Description
src/Shared/LoggingHelpers.cs Updates dashboard summary log formatting and container warning emission.
tests/Aspire.Dashboard.Tests/LoggingHelpersTests.cs Adjusts unit test assertions for the new log output format.

{
templateBuilder.Append('\n');
templateBuilder.Append("URLs may need changes depending on how network access to the container is configured.").Append('\n');
logger.LogInformation("Dashboard is running in a container. Access the dashboard from the host using port forwarding.");

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Fixed in commit ac6b0f4 → updated FrontendBrowserTokenAuthTests.LogOutput_InContainer_LoginLinkContainerMessage to assert the new standalone container log message instead of looking for the old text inside the summary log.

@github-actions

Copy link
Copy Markdown
Contributor

CLI E2E Tests failed — 106 passed, 1 failed, 2 unknown (commit ac6b0f4)

❌ Failed Tests

Status Test Recording Job Artifacts
CreateAndRunEmptyAppHostProject Recording #78284604941 Logs
View all recordings
Status Test Recording Job Artifacts
AddPackageInteractiveWhileAppHostRunningDetached Recording #78284604442 Logs
AddPackageWhileAppHostRunningDetached Recording #78284604442 Logs
AgentCommands_AllHelpOutputs_AreCorrect Recording #78284604413 Logs
AgentInitCommand_DefaultSelection_InstallsDefaultSkills Recording #78284604413 Logs
AgentInitCommand_MigratesDeprecatedConfig Recording #78284604413 Logs
AgentMcpListStructuredLogsReturnsLogsFromStarterApp Recording #78284604956 Logs
AgentMcpListStructuredLogsReturnsLogsFromStarterApp_DevLocalhost Recording #78284604956 Logs
AgentMcpListStructuredLogsReturnsLogsFromStarterApp_Isolated Recording #78284604956 Logs
AllPublishMethodsBuildDockerImages Recording #78284605023 Logs
AspireAddAndStartWorkAgainstLegacyAppHostTs Recording #78284604265 Logs
AspireAddPackageVersionToDirectoryPackagesProps Recording #78284605447 Logs
AspireInitSingleFileAppHostRunsViaDotnetRunAppHost Recording #78284605399 Logs
AspireInitWithExistingAppHostDirRecreatesMissingNuGetConfigAndPreservesFiles Recording #78284605353 Logs
AspireInitWithSolutionFileGeneratesAppHostThatBuildsAgainstChannelHive Recording #78284605353 Logs
AspireStartUpdatesStaleTypeScriptAppHostPath Recording #78284605388 Logs
AspireUpdateRemovesAppHostPackageVersionFromDirectoryPackagesProps Recording #78284605447 Logs
AspireUpdateRemovesOrphanAppHostPackageVersionWhenSdkAlreadyCurrent Recording #78284605447 Logs
Banner_DisplayedOnFirstRun Recording #78284605013 Logs
Banner_DisplayedWithExplicitFlag Recording #78284605013 Logs
Banner_NotDisplayedWithNoLogoFlag Recording #78284605013 Logs
CertificatesClean_RemovesCertificates Recording #78284605293 Logs
CertificatesTrust_WithNoCert_CreatesAndTrustsCertificate Recording #78284605293 Logs
CertificatesTrust_WithUntrustedCert_TrustsCertificate Recording #78284605293 Logs
ConfigSetGet_CreatesNestedJsonFormat Recording #78284605594 Logs
CreateAndRunAspireStarterProject Recording #78284605634 Logs
CreateAndRunAspireStarterProjectWithBundle Recording #78284605140 Logs
CreateAndRunEmptyAppHostProject Recording #78284604941 Logs
CreateAndRunJavaEmptyAppHostProject Recording #78284604454 Logs
CreateAndRunJsReactProject Recording #78284605477 Logs
CreateAndRunPythonReactProject Recording #78284605704 Logs
CreateAndRunTypeScriptEmptyAppHostProject Recording #78284604121 Logs
CreateAndRunTypeScriptStarterProject Recording #78284604668 Logs
CreateJavaAppHostWithViteApp Recording #78284604141 Logs
CreateTypeScriptAppHostWithViteApp_AllowsGuestAppPackageManagerToDiffer Recording #78284605450 Logs
CreateTypeScriptAppHostWithViteApp_UsesConfiguredToolchain Recording #78284605450 Logs
DashboardRunWithAgentMcpListTracesReturnsNoTraces Recording #78284605396 Logs
DashboardRunWithAgentMcpListTracesReturnsNoTraces_DevLocalhost Recording #78284605396 Logs
DashboardRunWithOtelTracesReturnsNoTraces Recording #78284605396 Logs
DashboardRunWithOtelTracesReturnsNoTraces_DevLocalhost Recording #78284605396 Logs
DeployK8sBasicApiService Recording #78284604810 Logs
DeployK8sWithExternalHelmChart Recording #78284604293 Logs
DeployK8sWithGarnet Recording #78284604887 Logs
DeployK8sWithMongoDB Recording #78284605316 Logs
DeployK8sWithMySql Recording #78284604112 Logs
DeployK8sWithPostgres Recording #78284604345 Logs
DeployK8sWithRabbitMQ Recording #78284604507 Logs
DeployK8sWithRedis Recording #78284604663 Logs
DeployK8sWithSqlServer Recording #78284605097 Logs
DeployK8sWithValkey Recording #78284604679 Logs
DeployTypeScriptAppToKubernetes Recording #78284605612 Logs
DescribeCommandResolvesReplicaNames Recording #78284605088 Logs
DescribeCommandShowsRunningResources Recording #78284605088 Logs
DetachFormatJsonProducesValidJson Recording #78284605585 Logs
DetachFormatJsonProducesValidJsonWhenRestartingExistingInstance Recording #78284605585 Logs
DoPublishAndDeployListStepsWork Recording #78284604608 Logs
DocsCommand_RendersInteractiveMarkdownFromLocalSource Recording #78284605631 Logs
DoctorCommand_DetectsDeprecatedAgentConfig Recording #78284604413 Logs
DoctorCommand_TypeScriptAppHostReportsMissingConfiguredToolchain Recording #78284605237 Logs
DoctorCommand_WithSslCertDir_ShowsTrusted Recording #78284605237 Logs
DoctorCommand_WithoutSslCertDir_ShowsPartiallyTrusted Recording #78284605237 Logs
GatewayWithoutExternalEndpoint_FailsPublishWithGuidance Recording #78284605563 Logs
GeneratedAspireDevScript_StartsWatchMode_WithConfiguredToolchain Recording #78284605450 Logs
GlobalMigration_HandlesCommentsAndTrailingCommas Recording #78284605594 Logs
GlobalMigration_HandlesMalformedLegacyJson Recording #78284605594 Logs
GlobalMigration_PreservesAllValueTypes Recording #78284605594 Logs
GlobalMigration_SkipsWhenNewConfigExists Recording #78284605594 Logs
GlobalSettings_MigratedFromLegacyFormat Recording #78284605594 Logs
IngressWithoutExternalEndpoint_FailsPublishWithGuidance Recording #78284605563 Logs
InitTypeScriptAppHost_AugmentsExistingViteRepoInWorkspaceSubdirectory Recording #78284605450 Logs
InteractiveCSharpInitCreatesExpectedFiles Recording #78284605239 Logs
InvalidAppHostPathWithComments_IsHealedOnRun Recording #78284605277 Logs
JavaScriptHostingApisRunFromTypeScriptAppHost Recording #78284605023 Logs
LatestCliCanStartStableChannelAppHost Recording #78284605634 Logs
LatestCliCanStartStableChannelTypeScriptAppHost Recording #78284605634 Logs
LegacySettingsMigration_AdjustsRelativeAppHostPath Recording #78284605388 Logs
LogsCommandShowsResourceLogs Recording #78284604823 Logs
OtelLogsReturnsStructuredLogsFromStarterApp Recording #78284604488 Logs
OtelLogsReturnsStructuredLogsFromStarterAppIsolated Recording #78284604488 Logs
PsCommandListsRunningAppHost Recording #78284605529 Logs
PsFormatJsonOutputsOnlyJsonToStdout Recording #78284605529 Logs
PublishJavaScriptPatternsGeneratesExpectedDockerComposeArtifacts Recording #78284605194 Logs
PublishWithConfigureEnvFileUpdatesEnvOutput Recording #78284605194 Logs
PublishWithDockerComposeServiceCallbackSucceeds Recording #78284605194 Logs
PublishWithoutOutputPathUsesAppHostDirectoryDefault Recording #78284605194 Logs
ResourceCommand_FailedExecution_DisplaysAppHostLogPathAndLogContainsEntries Recording #78284604937 Logs
ResourceCommand_SetAndDeleteParameterUpdatesDescribeOutput Recording #78284604937 Logs
RestoreGeneratesSdkFiles Recording #78284605115 Logs
RestoreGeneratesSdkFiles_WithConfiguredToolchain Recording #78284605027 Logs
RestoreRefreshesGeneratedSdkAfterAddingIntegration Recording #78284605027 Logs
RestoreSupportsConfigOnlyHelperPackageAndCrossPackageTypes Recording #78284604753 Logs
RunFromParentDirectory_UsesExistingConfigNearAppHost Recording #78284604514 Logs
RunReportsSyntaxErrorsForDotNetAppHost Recording #78284604660 Logs
RunReportsSyntaxErrorsForTypeScriptAppHost Recording #78284604660 Logs
SecretCrudOnDotNetAppHost Recording #78284604620 Logs
SecretCrudOnTypeScriptAppHost Recording #78284605597 Logs
StagingChannel_ConfigureAndVerifySettings_ThenSwitchChannels Recording #78284604605 Logs
StartAndWaitForTypeScriptSqlServerAppHostWithNativeAssets Recording #78284604253 Logs
StartReportsSyntaxErrorsForDotNetAppHost Recording #78284604660 Logs
StartReportsSyntaxErrorsForTypeScriptAppHost Recording #78284604660 Logs
StopAllAppHostsFromAppHostDirectory Recording #78284603997 Logs
StopJavaPolyglotAppHostUsingApphostDirectory Recording #78284604287 Logs
StopNonInteractiveSingleAppHost Recording #78284603997 Logs
StopTypeScriptPolyglotAppHostUsingApphostDirectory Recording #78284604836 Logs
StopWithNoRunningAppHostExitsSuccessfully Recording #78284604442 Logs
UnAwaitedChainsCompileWithAutoResolvePromises Recording #78284605027 Logs
UpdateProjectChannelToStable_CSharpEmptyAppHost_PreservesAspireConfigChannel Recording #78284605267 Logs
UpdateProjectChannelToStable_CSharpSingleFileInit_PreservesAspireConfigChannel Recording #78284605267 Logs
UpdateProjectChannelToStable_TypeScriptSingleFileInit_PreservesAspireConfigChannel Recording #78284605267 Logs
UpdateProjectChannelToStable_TypeScript_PreviewsStablePackagesAndPreservesChannel Recording #78284605267 Logs

📹 Recordings uploaded automatically from CI run #26572290695

…er log message

Co-authored-by: JamesNK <303201+JamesNK@users.noreply.github.com>
@davidfowl
David Fowler (davidfowl) merged commit 9c95144 into main May 29, 2026
311 checks passed
@davidfowl
David Fowler (davidfowl) deleted the improve/dashboard-summary-formatting branch May 29, 2026 01:31
@github-actions github-actions Bot modified the milestones: 13.4, 13.5 May 29, 2026
@JamesNK

Copy link
Copy Markdown
Member Author

/backport to release/13.4

@github-actions

Copy link
Copy Markdown
Contributor

Started backporting to release/13.4 (link to workflow run)

@aspire-repo-bot

Copy link
Copy Markdown
Contributor

✅ No documentation update needed.

docs_optional → formatting_or_comment_only

No signals triggered (signal_count == 0). The PR improves the visual formatting of the Aspire dashboard startup summary log: it adds indented bullet prefixes ( -) to the dashboard and OTLP URL lines and emits the container access guidance as a separate LogInformation call. These are cosmetic changes to console output at startup — no public API, configuration keys, CLI flags, documented defaults, or user-facing feature behavior changed. The only modified source files were src/Shared/LoggingHelpers.cs (formatting logic) and test/assertion updates. No documentation update is required.

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants