如何将日志记录添加到Blazor服务器端组件?

rab*_*ens 3 c# asp.net-core

我试图创建一个托管的ASP.net Blazor应用程序,并试图将记录器添加到我的控制器中。

我有这个:

public MyController(ILogger logger) {
    _logger = logger;
    // more initialization
}
Run Code Online (Sandbox Code Playgroud)

但是当我运行它时,我得到:

fail: Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware[1]
      An unhandled exception has occurred while executing the request.
System.InvalidOperationException: Unable to resolve service for type 'Microsoft.Extensions.Logging.ILogger' while attempting to activate 'MyApp.Server.Controllers.MyController'.
Run Code Online (Sandbox Code Playgroud)

由于有许多日志消息在滚动,因此我想Blazor已经初始化了一个记录器。

我该如何访问?

pok*_*oke 5

非泛型ILogger未在服务集合中注册。相反,您应该注入Generic ILogger<T>。通用类型参数T用于设置与记录器实例链接的类别名称。它使您可以轻松查看日志呼叫的来源。

通常,您将使用记录器的类型指定为通用类型参数。因此,在您的情况下,您将使用ILogger<MyController>

public MyController(ILogger<MyController> logger)
{
    _logger = logger;
}
Run Code Online (Sandbox Code Playgroud)

请注意,服务器端Blazor对此行为没有特殊要求。这是标准的ASP.NET Core,并且该控制器也是普通的ASP.NET Core控制器。

  • @Issac如果您查看问题,将会看到一个* controller *,完全存在于Blazor之外(无论是服务器端还是客户端)。因此,由于问题实际上与Blazor无关,因此我的答案完全无视了它,除了最后的评论。 (2认同)