Black and white .NET Aspire console? Worry no more. Use this :
applyThemeToRedirectedOutput: true
Full code example, taken from ADG's Logging helper method :
using ADG.Playground.ServiceDefaults.Observability.Options;
using AGX.Common.Logging.Serilog;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Serilog;
using Serilog.Exceptions;
using Serilog.Sinks.OpenTelemetry;
using Serilog.Sinks.SystemConsole.Themes;
namespace ADG.Playground.ServiceDefaults.Observability;
public static class Logging
{
public static IHostApplicationBuilder ConfigureSerilog(this IHostApplicationBuilder builder, ObservabilityOptions options)
{ builder.Logging.AddOpenTelemetry(logging =>
{
logging.IncludeFormattedMessage = true;
logging.IncludeScopes = true;
});
ConsoleTheme theme = AnsiConsoleTheme.Code;
builder.Services.AddSerilog((sp, configuration) =>
{
configuration.MinimumLevel.Is(options.LogLevel);
configuration.ReadFrom.Configuration(builder.Configuration);
configuration.ReadFrom.Services(sp);
configuration.Enrich.FromLogContext();
configuration.Enrich.WithExceptionDetails();
configuration.Enrich.FromLogContext();
configuration.Enrich.WithThreadId();
configuration.Enrich.With(new ThreadNameEnricher());
configuration.WriteTo.Console(
theme: theme,
outputTemplate: "[{Timestamp:yyyy-MM-dd HH:mm:ss.fff} {Level:w3} {ThreadId}{ThreadName}{FilePath}{Method}{LineNumber}] {Message}{NewLine}{Exception}",
// Allows for theming of redirected output
// https://github.com/serilog/serilog-sinks-console/issues/64#issuecomment-1307973995
applyThemeToRedirectedOutput: true
);
configuration.WriteTo.OpenTelemetry(c =>
{
c.Endpoint = builder.Configuration["OTEL_EXPORTER_OTLP_ENDPOINT"];
c.Protocol = OtlpProtocol.Grpc;
c.IncludedData = IncludedData.TraceIdField | IncludedData.SpanIdField | IncludedData.SourceContextAttribute;
});
});
LoggingConfig.ConfigureLogger();
return builder;
}}
Notice line 38.
Voilà :)