Serilog in .NET Core Web API

Serilog in .NET Core Web API

📝 Serilog in .NET Core Web API

Serilog is a structured logging library that enables flexible, readable logging for .NET apps. It supports multiple sinks such as console, file, and SQL Server, making it ideal for debugging and monitoring.

🔧 Step 1: Install NuGet Packages

Install the following packages:

Install-Package Serilog.AspNetCore
Install-Package Serilog.Settings.Configuration
Install-Package Serilog.Sinks.Console
Install-Package Serilog.Sinks.File

🛠️ Step 2: Configure Serilog in Program.cs

using Serilog;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.Hosting;

var builder = WebApplication.CreateBuilder(args);

Log.Logger = new LoggerConfiguration()
    .ReadFrom.Configuration(builder.Configuration)
    .Enrich.FromLogContext()
    .WriteTo.Console()
    .WriteTo.File("logs/log-.txt", rollingInterval: RollingInterval.Day)
    .CreateLogger();

builder.Host.UseSerilog();
builder.Services.AddControllers();

var app = builder.Build();
app.UseSerilogRequestLogging();
app.MapControllers();
app.Run();

⚙️ Step 3: Configure appsettings.json

{
  "Serilog": {
    "Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.File" ],
    "MinimumLevel": "Information",
    "WriteTo": [
      { "Name": "Console" },
      {
        "Name": "File",
        "Args": {
          "path": "logs/log-.txt",
          "rollingInterval": "Day"
        }
      }
    ],
    "Enrich": [ "FromLogContext" ],
    "Properties": {
      "Application": "MyAPI"
    }
  }
}

💻 Using Serilog in a Controller

[ApiController]
[Route("api/[controller]")]
public class SampleController : ControllerBase
{
    private readonly ILogger<SampleController> _logger;

    public SampleController(ILogger<SampleController> logger)
    {
        _logger = logger;
    }

    [HttpGet]
    public IActionResult Get()
    {
        _logger.LogInformation("Handling GET at {Time}", DateTime.UtcNow);
        return Ok("Logging with Serilog!");
    }
}

✅ Real-Time Example: Logging User Login

[ApiController]
[Route("api/[controller]")]
public class AuthController : ControllerBase
{
    private readonly ILogger<AuthController> _logger;

    public AuthController(ILogger<AuthController> logger)
    {
        _logger = logger;
    }

    [HttpPost("login")]
    public IActionResult Login([FromBody] LoginRequest request)
    {
        _logger.LogInformation("Login attempt for user: {Username} at {Time}", request.Username, DateTime.UtcNow);

        if (request.Username == "admin" && request.Password == "password")
        {
            _logger.LogInformation("✅ Successful login for user: {Username} at {Time}", request.Username, DateTime.UtcNow);
            return Ok("Login successful");
        }

        _logger.LogWarning("❌ Failed login for user: {Username} at {Time}", request.Username, DateTime.UtcNow);
        return Unauthorized("Invalid credentials");
    }
}

public class LoginRequest
{
    public string Username { get; set; }
    public string Password { get; set; }
}
💡 Tip: You’ll see entries like:
[Information] Login attempt for user: admin at 2024-03-18T12:00:00Z
[Warning] Failed login for user: hacker at 2024-03-18T12:05:00Z

🔄 Advanced Features

1️⃣ Logging to SQL Server

Install:

Install-Package Serilog.Sinks.MSSqlServer

Configure in Program.cs:

.WriteTo.MSSqlServer(
  connectionString: "YourConnectionString",
  sinkOptions: new MSSqlServerSinkOptions { TableName = "Logs" })

2️⃣ Enrich Logs with Context

Log.Logger = new LoggerConfiguration()
    .Enrich.WithProperty("Environment", "Production")
    .Enrich.WithThreadId()
    .CreateLogger();

3️⃣ Enable HTTP Request Logging

app.UseSerilogRequestLogging();

This logs each HTTP request with details like status code, duration, etc.

📌 Conclusion

Serilog makes structured logging easy, extensible, and production-ready. By integrating it with ASP.NET Core Web API, you gain powerful diagnostics, traceability, and support for rich logging outputs like files, databases, or the cloud.

Use it early in development to catch issues faster and keep your logs clean and informative.

Comments

Popular posts from this blog

Debouncing & Throttling in RxJS: Optimizing API Calls and User Interactions

Promises in Angular

Comprehensive Guide to C# and .NET Core OOP Concepts and Language Features