Console Logging in ASP.NET Core with Serilog
Goal: Set up Serilog for console logging in an ASP.NET Core Web API.
Install Serilog
dotnet add package Serilog.AspNetCore
Configure Serilog in Program.cs
public class Program
{
public static void Main(string[] args)
{
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.MinimumLevel.Override("Microsoft", LogEventLevel.Information)
.Enrich.FromLogContext()
.WriteTo.Console()
.CreateLogger();
try
{
Log.Information("Starting web host");
CreateHostBuilder(args).Build().Run();
}
catch (Exception ex)
{
Log.Fatal(ex, "Host terminated unexpectedly");
}
finally
{
Log.CloseAndFlush();
}
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseSerilog()
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
Enable Request Logging
// Startup.cs
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseSerilogRequestLogging();
...
}
Use the Logger
[ApiController]
[Route("[controller]")]
public class OpsController : ControllerBase
{
private readonly ILogger<OpsController> _logger;
public OpsController(ILogger<OpsController> logger)
{
_logger = logger;
}
[HttpGet, Route("{currency}")]
public async Task<IActionResult> Get(string currency)
{
_logger.LogInformation("Processed request /ops in {currency}", currency);
return Ok(result);
}
}