Skip to content

Improve Aspire logs search performance#17010

Merged
davidfowl merged 6 commits into
mainfrom
davidfowl/log-search-performance
May 14, 2026
Merged

Improve Aspire logs search performance#17010
davidfowl merged 6 commits into
mainfrom
davidfowl/log-search-performance

Conversation

@davidfowl
Copy link
Copy Markdown
Contributor

@davidfowl davidfowl commented May 13, 2026

Description

Console log search is slow when an AppHost has large log streams because the CLI previously transferred every log line over JSON-RPC, parsed it, and then filtered locally. This changes the auxiliary backchannel so newer AppHosts can apply resource, search, hidden-resource, and single-resource tail filters before streaming logs back to the CLI. The CLI keeps its final client-side filtering for compatibility with older AppHosts and for parsed/display-name semantics.

This also adds profiling-only JSON-RPC spans for the CLI and Hosting backchannel path, with explicit trace context propagation in request objects so aspire logs --search can be measured end to end across processes. Newer AppHosts also expose an aux.v3 batched console-log stream so the CLI can reduce per-line JSON-RPC stream overhead without changing the existing line-based contract.

User-facing usage

Users keep using the same aspire logs command. The optimization is automatic when the connected AppHost supports the v2/v3 auxiliary backchannel:

aspire logs producer --search needle --tail 75 --format Json

Performance

E2E harness: 75,000 emitted log lines, 75 matching needle lines.

Path Wall clock JSON-RPC stream items Hosting log span
Before: legacy client-side filtering 131.71s 75,002 lines ~131s
After: server-side search filtering 0.90s 75 lines ~255ms
After: server-side filtering + batched streaming 0.92s avg (0.87s-0.95s) 1 batch not re-captured

Batching drops the filtered tail result from 75 JSON-RPC stream frames to 1 batch in this scenario. The wall clock is comparable to the line-streaming server-side filter path because command startup and AppHost log scanning dominate after the full 75,000-line transfer is removed.

Validation

  • dotnet build tests/Aspire.Cli.Tests/Aspire.Cli.Tests.csproj --no-restore /p:SkipNativeBuild=true
  • dotnet build tests/Aspire.Hosting.Tests/Aspire.Hosting.Tests.csproj --no-restore /p:SkipNativeBuild=true
  • dotnet test --project tests/Aspire.Cli.Tests/Aspire.Cli.Tests.csproj --no-build --no-launch-profile -- --filter-class "*.LogsCommandTests" --filter-not-trait "quarantined=true" --filter-not-trait "outerloop=true"
  • dotnet test --project tests/Aspire.Hosting.Tests/Aspire.Hosting.Tests.csproj --no-build --no-launch-profile -- --filter-method "*.GetConsoleLogsAsync_AppliesSearchAndTailForSingleResource" --filter-method "*.GetConsoleLogBatchesAsync_AppliesSearchAndTailForSingleResource" --filter-method "*.GetConsoleLogsAsync_DoesNotApplyTailAcrossMultipleResources" --filter-method "*.GetConsoleLogsAsync_ExcludesHiddenResourcesWhenStreamingAllResources" --filter-not-trait "quarantined=true" --filter-not-trait "outerloop=true"
  • dotnet test --project tests/Aspire.Hosting.Tests/Aspire.Hosting.Tests.csproj --no-build --no-launch-profile -- --filter-method "*.GetCapabilitiesAsyncReturnsCurrentCapabilities" --filter-not-trait "quarantined=true" --filter-not-trait "outerloop=true"
  • dotnet test --project tests/Aspire.Hosting.Tests/Aspire.Hosting.Tests.csproj --no-build --no-launch-profile -- --filter-method "*.BackchannelTypes_FollowContractRules" --filter-not-trait "quarantined=true" --filter-not-trait "outerloop=true"
  • ./eng/scripts/verify-startup-otel.sh --skip-build --target-aspire-path artifacts/bin/Aspire.Cli/Debug/net10.0/aspire --profiler-aspire-path artifacts/bin/Aspire.Cli/Debug/net10.0/aspire --post-start-delay 1
  • Manual E2E aspire logs producer --search needle --tail 75 --format Json against a detached AppHost returned 75 matching lines from line 001000 needle through line 075000 needle; repeated batched runs measured 0.93s, 0.95s, and 0.87s wall clock.

Fixes #16981

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

Push log search and tail filtering into the AppHost backchannel so the CLI does not need to transfer and parse large non-matching log streams. Add JSON-RPC profiling context propagation across CLI and Hosting to measure the path end to end.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings May 13, 2026 07:29
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 13, 2026

🚀 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 -- 17010

Or

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

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

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 speeds up aspire logs --search/--tail by extending the auxiliary backchannel so the AppHost can apply server-side filters (resource, hidden-resource, search, and single-resource tail) before streaming logs back to the CLI, reducing JSON-RPC payload volume. It also adds profiling-only JSON-RPC spans with explicit trace-context propagation via request objects for end-to-end measurement across CLI and AppHost processes.

Changes:

  • Add server-side console log filtering in the AppHost (GetConsoleLogsRequest extended with Search/Tail/IncludeHidden) and keep client-side filtering for compatibility/semantic parity.
  • Add JSON-RPC client/server profiling spans and propagate W3C trace context via backchannel request objects (BackchannelRequest.ProfilingContext).
  • Update unit tests across Hosting/CLI to cover the new console log RPC behavior and the profiling constant refactor.
Show a summary per file
File Description
tests/Aspire.Hosting.Tests/Backchannel/BackchannelContractTests.cs Updates contract validation lists and enforces request types derive from BackchannelRequest.
tests/Aspire.Hosting.Tests/Backchannel/AuxiliaryBackchannelRpcTargetTests.cs Adds coverage for server-side console log search/tail/hidden filtering; updates ctor DI requirements.
tests/Aspire.Cli.Tests/TestServices/TestAppHostAuxiliaryBackchannel.cs Extends test backchannel to support GetConsoleLogsAsync with optional override handler.
tests/Aspire.Cli.Tests/Telemetry/ProfilingTelemetryTests.cs Updates tests to new ProfilingTelemetry constant groupings (EnvironmentVariables, Baggage).
tests/Aspire.Cli.Tests/Telemetry/ProfilingTelemetryContextTests.cs Updates environment propagation tests to new constant groupings.
tests/Aspire.Cli.Tests/Projects/AppHostCandidateFinderTests.cs Updates profiling env var names used in tests.
tests/Aspire.Cli.Tests/Git/GitRepositoryTests.cs Updates profiling env var names used in tests.
tests/Aspire.Cli.Tests/Commands/RunCommandTests.cs Updates profiling env var and baggage names used in tests.
tests/Aspire.Cli.Tests/Commands/LsCommandTests.cs Updates profiling env var names used in tests.
tests/Aspire.Cli.Tests/Commands/LogsCommandTests.cs Adds tests ensuring snapshot filters are passed to the console logs request and legacy fallback stays correct.
src/Aspire.Hosting/DistributedApplicationBuilder.cs Registers Hosting ProfilingTelemetry in DI.
src/Aspire.Hosting/Diagnostics/ProfilingTelemetry.cs Adds server-side JSON-RPC span support and trace-context bootstrapping from request-propagated context.
src/Aspire.Hosting/Backchannel/BackchannelDataTypes.cs Adds BackchannelRequest/BackchannelProfilingContext; extends console log request filtering fields.
src/Aspire.Hosting/Backchannel/AuxiliaryBackchannelService.cs Wires configuration + profiling telemetry into the per-connection RPC target.
src/Aspire.Hosting/Backchannel/AuxiliaryBackchannelRpcTarget.cs Implements server-side console log filtering + streaming span instrumentation and context linking.
src/Aspire.Hosting/Backchannel/AppHostRpcTarget.cs Adds server-side JSON-RPC span instrumentation for pipeline steps RPC.
src/Aspire.Cli/Telemetry/ProfilingTelemetry.cs Adds JSON-RPC client span primitives; refactors env var and baggage constants; creates backchannel profiling context objects.
src/Aspire.Cli/Commands/LogsCommand.cs Uses GetConsoleLogsAsync(GetConsoleLogsRequest) for snapshot + follow to enable server-side filtering.
src/Aspire.Cli/Backchannel/ProfilingJsonRpcExtensions.cs New wrappers to add profiling spans around JsonRpc calls and inject profiling context into request objects.
src/Aspire.Cli/Backchannel/IAppHostAuxiliaryBackchannel.cs Adds GetConsoleLogsAsync(GetConsoleLogsRequest) to the auxiliary backchannel interface.
src/Aspire.Cli/Backchannel/AppHostCliBackchannel.cs Wraps JsonRpc calls with profiling helpers (including streaming).
src/Aspire.Cli/Backchannel/AppHostAuxiliaryBackchannel.cs Uses profiling JsonRpc wrappers; adds fallback messaging for missing console-log RPC and switches capability probe to request objects.

Copilot's findings

  • Files reviewed: 22/22 changed files
  • Comments generated: 2

Comment thread src/Aspire.Cli/Commands/LogsCommand.cs Outdated
Comment thread src/Aspire.Cli/Commands/LogsCommand.cs Outdated
Copy link
Copy Markdown
Member

@JamesNK JamesNK left a comment

Choose a reason for hiding this comment

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

4 items flagged: 1 stale dead-code discard, 1 hidden-resource filter contract clarity, 1 follow/tail asymmetry documentation, 1 queue capacity clarification. All are non-blocking observations — no bugs found.

Comment thread src/Aspire.Cli/Commands/LogsCommand.cs
Comment thread src/Aspire.Hosting/Backchannel/AuxiliaryBackchannelRpcTarget.cs Outdated
Comment thread src/Aspire.Hosting/Backchannel/AuxiliaryBackchannelRpcTarget.cs
Comment thread src/Aspire.Hosting/Backchannel/AuxiliaryBackchannelRpcTarget.cs
Copy link
Copy Markdown
Member

@JamesNK JamesNK left a comment

Choose a reason for hiding this comment

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

Additional finding: activity ownership transfer in streaming profiling helper.

Comment thread src/Aspire.Cli/Backchannel/ProfilingJsonRpcExtensions.cs
@JamesNK
Copy link
Copy Markdown
Member

JamesNK commented May 13, 2026

The CLI keeps its final client-side filtering for compatibility with older AppHosts and for parsed/display-name semantics.

Search doesn't need to be kept in the client. It's new in 13.3.

@JamesNK
Copy link
Copy Markdown
Member

JamesNK commented May 13, 2026

I'm surprised how slow this is without filtering in the app host. All other times the perf bottle neck has been DCP streaming to the app host.

Is JSON-RPC really bad at streaming?

Keep all-resource log requests on the legacy RPC for compatibility with older aux.v2 AppHosts. Clarify server-side log filtering and streaming profiling ownership, and add focused coverage for all-resource compatibility paths.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@davidfowl
Copy link
Copy Markdown
Contributor Author

Thanks for the overview. No code change was needed for this generated summary; I addressed the actionable review threads separately and pushed the follow-up commit.

@davidfowl
Copy link
Copy Markdown
Contributor Author

Accepted these observations. I removed the stale discard and added comments clarifying hidden named-resource requests, follow/tail behavior, and the fixed-size tail queue window.

@davidfowl
Copy link
Copy Markdown
Contributor Author

Accepted. I added a comment at the streaming profiling helper to document that activity ownership transfers to the returned enumerable and disposal depends on enumeration.

Add an aux.v3 console log batching method so newer CLIs can reduce per-line JSON-RPC stream overhead while preserving the existing line-based and legacy fallbacks for older AppHosts.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copy link
Copy Markdown
Member

@IEvangelist IEvangelist left a comment

Choose a reason for hiding this comment

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

Approving. Three non-blocking observations from review:

  1. WithProfilingContext hand-copies properties in 11 request types — adding a new property without updating the override silently drops it on the wire when profiling is enabled. A reflection-based contract test would prevent this.
  2. Server-side raw-content MatchesSearch can drop lines that the CLI's parsed-log search would match (ANSI-escape edge case).
  3. GetConsoleLogsRequest.ResourceName relaxed from
    equired to string? is not reflected in the spec doc.

Nice perf win — 131s → 0.9s is a great result.

Comment thread src/Aspire.Hosting/Backchannel/BackchannelDataTypes.cs Outdated
Comment thread src/Aspire.Hosting/Backchannel/AuxiliaryBackchannelRpcTarget.cs
Comment thread src/Aspire.Hosting/Backchannel/BackchannelDataTypes.cs
Normalize ANSI before server-side log search, document console-log ResourceName compatibility, and add contract coverage for WithProfilingContext property preservation.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@davidfowl
Copy link
Copy Markdown
Contributor Author

Accepted all three observations. I added the WithProfilingContext property-preservation contract test, normalized ANSI stripping in the server and CLI search paths with regression coverage, and documented ResourceName V2/V3 compatibility in the backchannel spec.

Comment thread src/Aspire.Hosting/Backchannel/BackchannelDataTypes.cs Outdated
Comment thread src/Aspire.Hosting/Backchannel/BackchannelDataTypes.cs Outdated
Comment thread src/Aspire.Hosting/Backchannel/BackchannelDataTypes.cs Outdated
Comment thread src/Aspire.Hosting/Diagnostics/ProfilingTelemetry.cs
@JamesNK
Copy link
Copy Markdown
Member

JamesNK commented May 14, 2026

I don't know if this was an existing issue with --search or not, but from testing:

Search with empty string returns everything:

aspire logs --search "" --timestamps --tail 2

This makes sense.

Search with no value returns nothing:

aspire logs --search --timestamps --tail 2

I feel like it should either return everything, or CLI option validation should complain that a value is required.

Edit: I investigated. The value of search is always the value after it, even if it matches another option, i.e. --timestamps. Not a bug.

@JamesNK
Copy link
Copy Markdown
Member

JamesNK commented May 14, 2026

Performance oddity:

  1. In the stress playground app I ran the log message limit command on stress-apiservice
  2. With search it is very fast (sub 1 second): aspire logs --search "dashboard" --timestamps --tail 2
  3. WIthout search, and only tail, it is much slower (20 seconds): aspire logs --timestamps --tail 2

Is tail filtered in the CLI?

Edit: I investigated and tail isn't filtered in the app host when there are multiple resources. Is this something we could improve? Most of the time there won't be a single resource specified.

Comment thread src/Aspire.Hosting/Backchannel/AuxiliaryBackchannelRpcTarget.cs
Move W3C trace context propagation to StreamJsonRpc activity tracing and keep Aspire profiling metadata in backchannel baggage.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Add a reusable ChannelExtensions batching helper for IAsyncEnumerable and use it for console log batch streaming.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@github-actions
Copy link
Copy Markdown
Contributor

🎬 CLI E2E Test Recordings — 80 recordings uploaded (commit cfe8300)

View all recordings
Status Test Recording
AddPackageInteractiveWhileAppHostRunningDetached ▶️ View Recording
AddPackageWhileAppHostRunningDetached ▶️ View Recording
AgentCommands_AllHelpOutputs_AreCorrect ▶️ View Recording
AgentInitCommand_DefaultSelection_InstallsSkillOnly ▶️ View Recording
AgentInitCommand_MigratesDeprecatedConfig ▶️ View Recording
AspireAddPackageVersionToDirectoryPackagesProps ▶️ View Recording
AspireInitSingleFileAppHostRunsViaDotnetRunAppHost ▶️ View Recording
AspireUpdateRemovesAppHostPackageVersionFromDirectoryPackagesProps ▶️ View Recording
Banner_DisplayedOnFirstRun ▶️ View Recording
Banner_DisplayedWithExplicitFlag ▶️ View Recording
Banner_NotDisplayedWithNoLogoFlag ▶️ View Recording
CertificatesClean_RemovesCertificates ▶️ View Recording
CertificatesTrust_WithNoCert_CreatesAndTrustsCertificate ▶️ View Recording
CertificatesTrust_WithUntrustedCert_TrustsCertificate ▶️ View Recording
ConfigSetGet_CreatesNestedJsonFormat ▶️ View Recording
CreateAndRunAspireStarterProject ▶️ View Recording
CreateAndRunAspireStarterProjectWithBundle ▶️ View Recording
CreateAndRunEmptyAppHostProject ▶️ View Recording
CreateAndRunJavaEmptyAppHostProject ▶️ View Recording
CreateAndRunJsReactProject ▶️ View Recording
CreateAndRunPythonReactProject ▶️ View Recording
CreateAndRunTypeScriptEmptyAppHostProject ▶️ View Recording
CreateAndRunTypeScriptStarterProject ▶️ View Recording
CreateJavaAppHostWithViteApp ▶️ View Recording
CreateTypeScriptAppHostWithViteApp_UsesConfiguredToolchain ▶️ View Recording
DashboardRunWithOtelTracesReturnsNoTraces ▶️ View Recording
DeployK8sBasicApiService ▶️ View Recording
DeployK8sWithExternalHelmChart ▶️ View Recording
DeployK8sWithGarnet ▶️ View Recording
DeployK8sWithMongoDB ▶️ View Recording
DeployK8sWithMySql ▶️ View Recording
DeployK8sWithPostgres ▶️ View Recording
DeployK8sWithRabbitMQ ▶️ View Recording
DeployK8sWithRedis ▶️ View Recording
DeployK8sWithSqlServer ▶️ View Recording
DeployK8sWithValkey ▶️ View Recording
DeployTypeScriptAppToKubernetes ▶️ View Recording
DescribeCommandResolvesReplicaNames ▶️ View Recording
DescribeCommandShowsRunningResources ▶️ View Recording
DetachFormatJsonProducesValidJson ▶️ View Recording
DetachFormatJsonProducesValidJsonWhenRestartingExistingInstance ▶️ View Recording
DoListStepsShowsPipelineSteps ▶️ View Recording
DocsCommand_RendersInteractiveMarkdownFromLocalSource ▶️ View Recording
DoctorCommand_DetectsDeprecatedAgentConfig ▶️ View Recording
DoctorCommand_TypeScriptAppHostReportsMissingConfiguredToolchain ▶️ View Recording
DoctorCommand_WithSslCertDir_ShowsTrusted ▶️ View Recording
DoctorCommand_WithoutSslCertDir_ShowsPartiallyTrusted ▶️ View Recording
GlobalMigration_HandlesCommentsAndTrailingCommas ▶️ View Recording
GlobalMigration_HandlesMalformedLegacyJson ▶️ View Recording
GlobalMigration_PreservesAllValueTypes ▶️ View Recording
GlobalMigration_SkipsWhenNewConfigExists ▶️ View Recording
GlobalSettings_MigratedFromLegacyFormat ▶️ View Recording
InitTypeScriptAppHost_AugmentsExistingViteRepoAtRoot ▶️ View Recording
InteractiveCSharpInitCreatesExpectedFiles ▶️ View Recording
InvalidAppHostPathWithComments_IsHealedOnRun ▶️ View Recording
LatestCliCanStartStableChannelAppHost ▶️ View Recording
LatestCliCanStartStableChannelTypeScriptAppHost ▶️ View Recording
LegacySettingsMigration_AdjustsRelativeAppHostPath ▶️ View Recording
LogsCommandShowsResourceLogs ▶️ View Recording
OtelLogsReturnsStructuredLogsFromStarterAppCore ▶️ View Recording
PsCommandListsRunningAppHost ▶️ View Recording
PsFormatJsonOutputsOnlyJsonToStdout ▶️ View Recording
PublishWithConfigureEnvFileUpdatesEnvOutput ▶️ View Recording
PublishWithDockerComposeServiceCallbackSucceeds ▶️ View Recording
PublishWithoutOutputPathUsesAppHostDirectoryDefault ▶️ View Recording
ResourceCommand_FailsWhenInteractionServiceIsRequired ▶️ View Recording
RestoreGeneratesSdkFiles ▶️ View Recording
RestoreGeneratesSdkFiles_WithConfiguredToolchain ▶️ View Recording
RestoreRefreshesGeneratedSdkAfterAddingIntegration ▶️ View Recording
RestoreSupportsConfigOnlyHelperPackageAndCrossPackageTypes ▶️ View Recording
RunFromParentDirectory_UsesExistingConfigNearAppHost ▶️ View Recording
SecretCrudOnDotNetAppHost ▶️ View Recording
SecretCrudOnTypeScriptAppHost ▶️ View Recording
StagingChannel_ConfigureAndVerifySettings_ThenSwitchChannels ▶️ View Recording
StartAndWaitForTypeScriptSqlServerAppHostWithNativeAssets ▶️ View Recording
StopAllAppHostsFromAppHostDirectory ▶️ View Recording
StopNonInteractiveSingleAppHost ▶️ View Recording
StopWithNoRunningAppHostExitsSuccessfully ▶️ View Recording
UnAwaitedChainsCompileWithAutoResolvePromises ▶️ View Recording
UpdateProjectChannelToStable_TypeScript_PicksUpStablePackages ▶️ View Recording

📹 Recordings uploaded automatically from CI run #25835514343

@davidfowl davidfowl merged commit eb22d04 into main May 14, 2026
581 of 585 checks passed
@microsoft-github-policy-service microsoft-github-policy-service Bot added this to the 13.4 milestone May 14, 2026
aspire-repo-bot Bot added a commit to microsoft/aspire.dev that referenced this pull request May 14, 2026
Documents the --search / -s option added in microsoft/aspire#17010,
including server-side filtering behavior when connected to a v2+
AppHost auxiliary backchannel.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@aspire-repo-bot
Copy link
Copy Markdown
Contributor

Pull request created: #948

Generated by PR Documentation Check

@aspire-repo-bot
Copy link
Copy Markdown
Contributor

📝 Documentation has been drafted in microsoft/aspire.dev#948 targeting release/13.4.

Updated src/frontend/src/content/docs/reference/cli/commands/aspire-logs.mdx to document the --search / -s option introduced by this PR. Added the option description (with a note on server-side filtering for v2+ AppHost backchannels), expanded the Description paragraph, and added two new examples showing --search usage.

Note

This draft PR needs human review before merging.

JamesNK pushed a commit that referenced this pull request May 14, 2026
* Improve Aspire logs search performance

Push log search and tail filtering into the AppHost backchannel so the CLI does not need to transfer and parse large non-matching log streams. Add JSON-RPC profiling context propagation across CLI and Hosting to measure the path end to end.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Address log search review feedback

Keep all-resource log requests on the legacy RPC for compatibility with older aux.v2 AppHosts. Clarify server-side log filtering and streaming profiling ownership, and add focused coverage for all-resource compatibility paths.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Batch console log streaming

Add an aux.v3 console log batching method so newer CLIs can reduce per-line JSON-RPC stream overhead while preserving the existing line-based and legacy fallbacks for older AppHosts.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Address log search review comments

Normalize ANSI before server-side log search, document console-log ResourceName compatibility, and add contract coverage for WithProfilingContext property preservation.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Use protocol trace context for backchannel profiling

Move W3C trace context propagation to StreamJsonRpc activity tracing and keep Aspire profiling metadata in backchannel baggage.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Share async enumerable batching helper

Add a reusable ChannelExtensions batching helper for IAsyncEnumerable and use it for console log batch streaming.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
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.

Console log search is slow on larger log streams

4 participants