在 ASP .NET Core Web API 控制器中注入 Serilog 的 ILogger 接口

Lin*_*986 7 c# dependency-injection serilog asp.net-core

我能找到的关于在 ASP .NET Core Web 应用程序ILogger<T>中使用 Serilog 的所有示例都使用 Microsoft 的界面,而不是使用 Serilog 的ILogger界面。

我如何才能使 Serilog 的 ILogger 可以通过构造函数注入?

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

Ale*_*eks 8

Serilog.Extensions.Logging您可以通过包含该软件包并在应用程序启动中包含以下内容,将 Serilog 安装为 Microsoft 日志记录框架下的记录器:-

public void ConfigureServices(IServiceCollection services)
{
    services.AddLogging(x =>
    {
        x.ClearProviders();
        x.AddSerilog(dispose: true);
    });

    ...
Run Code Online (Sandbox Code Playgroud)

或者,作为注入的替代方法,如果您只想引用 Serilog 记录器,Serilog.Log可以使用静态方法Log来创建记录器...

...
using Serilog;
...

namespace Test.Controllers
{
    public class TestController : Controller
    {
        private readonly static ILogger log = Log.ForContext(typeof(TestController));

        public TestController()
        {
            log.Debug("Test");
        }
Run Code Online (Sandbox Code Playgroud)

  • 赞成第一部分——不要将自己与控制器中的 serilog 连接起来。 (2认同)

Tao*_*hou 7

若你宁可 ILogger而不是ILogger<HomeController>,你可以尝试注册ILogger

这里有两个选项可以使用 Serialog.Information

  1. Log.Logger

    Log.Logger.Information("Information Log from Log.Logger");
    
    Run Code Online (Sandbox Code Playgroud)
  2. 登记 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();
        }        
    }
    
    Run Code Online (Sandbox Code Playgroud)