繁体   English   中英

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

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

我能找到的关于在 ASP .NET Core Web 应用程序中使用 Serilog 的所有示例都使用 Microsoft 的ILogger<T>接口,而不是使用 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();
    }
}

如果您更喜欢ILogger而不是ILogger<HomeController> ,您可以尝试注册ILogger

以下是使用Serialog.Information两个选项。

  1. 使用Log.Logger

     Log.Logger.Information("Information Log from Log.Logger");
  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(); } }

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

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

    ...

或者,作为注入的替代方法,如果您只想引用 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");
        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM