Search code examples
c#asp.net-coredependency-injectionserilog

Inject Serilog's ILogger interface in ASP .NET Core Web API Controller


All the examples I can find about using Serilog in an ASP .NET Core Web Application use Microsoft's ILogger<T> interface instead of using Serilog's ILogger interface.

How do I make it so that Serilog's ILogger can be injected via constructor, instead?

using Serilog;

public class HomeController : Controller
{
    ILogger logger;

    public HomeController(ILogger logger)
    {
        this.logger = logger;
    }

    public IActionResult Index()
    {
        this.logger.Information("Index was called");
        return View();
    }
}

Solution

  • If you prefer ILogger instead of ILogger<HomeController>, you could try to register ILogger.

    Here are two options to use Serialog.Information.

    1. Use Log.Logger

      Log.Logger.Information("Information Log from Log.Logger");
      
    2. Register ILogger

      //Startup.cs
      services.AddSingleton(Log.Logger);
      
      //Use
      public class HomeController : Controller
      {
          private readonly ILogger _logger;
          public HomeController(ILogger logger)
          {
              _logger = logger;
          }
          public IActionResult Index()
          {
              _logger.Information("Inform ILog from ILogger");
              return View();
          }        
      }