【问题标题】:ASP.NET Core API - Why does logger type match controller class?ASP.NET Core API - 为什么记录器类型匹配控制器类?
【发布时间】:2018-12-18 03:02:26
【问题描述】:

在这个使用 ASP.NET Core 中的依赖注入创建日志实例的代码示例中,为什么在构造函数中注入记录器时记录器类型是控制器类?

ILogger<TodoController> logger

不应该只是将ILogger logger 传递给构造函数而不是ILogger&lt;TodoController&gt; 吗?

代码示例:

public class TodoController : Controller
{
    private readonly ITodoRepository _todoRepository;
    private readonly ILogger _logger;

    public TodoController(ITodoRepository todoRepository,
        ILogger<TodoController> logger)
    {
        _todoRepository = todoRepository;
        _logger = logger;
    }

来源:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/logging/?tabs=aspnetcore2x&view=aspnetcore-2.2

【问题讨论】:

  • @JohnB LOL 不是错误
  • 我认为是 ILogger 而不是 ILogger...docs.microsoft.com/en-us/dotnet/api/…
  • 啊——感谢指正!
  • 您还需要在Startup.cs 中添加一些代码来配置依赖注入。您的代码示例仅显示您正在检索受依赖注入控制的对象的代码部分。

标签: c# asp.net-core-webapi


【解决方案1】:

看一些sample code

_logger.LogInformation(LoggingEvents.GetItem, "Getting item {ID}", id);

然后对应sample output

info: TodoApi.Controllers.TodoController[1002]
      Getting item 0

请注意,控制器的名称已包含在内,即使它没有在对 LogInformation 的调用中指定?

这就是为什么。它让记录器自动包含记录信息的类。

【讨论】:

  • 所以我想的不是 T 作为 Type。它是 ILogger 告诉记录器将哪个类放入记录器输出中......它不用于依赖注入来确定记录器类型。太好了,我现在明白了,谢谢!
猜你喜欢
  • 2021-06-06
  • 1970-01-01
  • 2023-04-06
  • 1970-01-01
  • 1970-01-01
  • 2014-05-19
  • 2016-07-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多