Skip to content

Instantly share code, notes, and snippets.

@AldeRoberge
Last active April 28, 2025 17:57
Show Gist options
  • Save AldeRoberge/773cb7a99763ff934c86d39deaf9cba8 to your computer and use it in GitHub Desktop.
Save AldeRoberge/773cb7a99763ff934c86d39deaf9cba8 to your computer and use it in GitHub Desktop.
Fix colors in .NET Aspire console and Serilog

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à :)

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