Vadim Tomashevsky
Vadim Tomashevsky

Reputation: 338

Can't see Serilog logger.LogDebug at the console

All, For some reason i can't see:

logger.LogDebug("Test debug")

At the console logger.

Program:

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

builder.Logging.ClearProviders();
builder.Logging.AddProvider(new CustomLoggerProvider());

builder.Logging.SetMinimumLevel(LogLevel.Debug);

builder.Services.AddHttpContextAccessor();
var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseHttpsRedirection();


app.MapGet("/weatherforecast", (ILogger<Program> logger ) =>
{
    logger.LogDebug("Test debug");

})
.WithName("GetWeatherForecast")
.WithOpenApi();

app.Run();

CustomLoggerProvider:

public class CustomLoggerProvider : ILoggerProvider
{
    public CustomLoggerProvider()
    {
    }

    public ILogger CreateLogger(string categoryName)
    {
        return new CustomLogger();
    }

    public void Dispose()
    {
      Serilog.Log.CloseAndFlush();
    }
}

CustomLogger:

public class CustomLogger : Microsoft.Extensions.Logging.ILogger
{
    public CustomLogger()
    {
        Serilog.Log.Logger = new LoggerConfiguration()
    .MinimumLevel.Debug()
    .MinimumLevel.Override("Microsoft", LogEventLevel.Debug)
    .Enrich.FromLogContext()
    .WriteTo.Console()   
    .CreateLogger();
    }

    public IDisposable? BeginScope<TState>(TState state) where TState : notnull
    {
        return default;
    }

    public bool IsEnabled(LogLevel logLevel)
    {
        return true;
    }

    public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception? exception, Func<TState, Exception?, string> formatter)
    {
        if (!IsEnabled(logLevel))
            return;

        Serilog.Log.Write((Serilog.Events.LogEventLevel)logLevel, exception, formatter(state, exception));
    }
}

Even here it's debug level:

{
  "Logging": {
    "LogLevel": {
      "Default": "Debug",
      "Microsoft.AspNetCore": "Debug"
    }
  },
  "AllowedHosts": "*"
}

With all this code above, I still can't see the debug.

I know that i can use Serilog differently, But i need to create a wrapper for the serilog! So i don't want it to be in the AppSettings

The way it does works:

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

Log.Logger = new LoggerConfiguration()
    .MinimumLevel.Debug()
    .WriteTo
    .Console()
    .WriteTo
    .File(
    formatter: new Serilog.Formatting.Json.JsonFormatter(),
    path: "Logs\\.log",
    restrictedToMinimumLevel: LogEventLevel.Debug,
    rollOnFileSizeLimit: true,
    rollingInterval: RollingInterval.Day
   )
    .CreateLogger();

builder.Host.UseSerilog();

builder.Services.AddHttpContextAccessor();
var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseHttpsRedirection();


app.MapGet("/weatherforecast", (ILogger<Program> logger ) =>
{
    logger.LogDebug("Test debug");

})
.WithName("GetWeatherForecast")
.WithOpenApi();

app.Run();

How can i see the debug log with the CustomLoggerProvider?

Thanks a lot.

Upvotes: 0

Views: 265

Answers (1)

Vadim Tomashevsky
Vadim Tomashevsky

Reputation: 338

Ok so after a research, This is the solution:

builder.Services.AddLogging(x =>
{
    x.Services.AddSingleton<ILoggerProvider,CustomLoggerProvider>();
    x.SetMinimumLevel(LogLevel.Debug);
    x.AddConsole();
    x.AddFilter<ConsoleLoggerProvider>(null, LogLevel.Debug);
});

or even better, this code is working prefect:

builder.Services.AddLogging(x =>
{
    x.Services.AddSingleton<ILoggerProvider,CustomLoggerProvider>();
                      // You can take it from your custom settings.
    x.AddFilter(null, LogLevel.Debug);
});

Upvotes: 0

Related Questions