首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ILogger类注入

ILogger类注入
EN

Stack Overflow用户
提问于 2021-12-14 21:01:04
回答 1查看 229关注 0票数 0

ILogger<T>ILogger有什么区别?下面是Sample类使用ILogger的两种方法,其中一种是最好的,原因是什么!

方法1

代码语言:javascript
复制
public class Sample
{
  private readonly ILogger<Sample> _logger;

  public Sample(ILogger<Sample> logger)
  {
    _logger = logger;
  }

  public void DoSomething()
  {
    _logger.LogInformation("The answer is {number}", 42);
  }
}

方法2

代码语言:javascript
复制
public class Sample
{
  private readonly ILogger _logger;

  public Sample(ILogger logger)
  {
    _logger = logger;
  }

  public void DoSomething()
  {
    _logger.LogInformation("The answer is {number}", 42);
  }
}
EN

回答 1

Stack Overflow用户

发布于 2021-12-15 12:23:21

根据ILogger在您的.net核心中的使用情况,这取决于您的需求。

ILogger

ILogger是一个记录器,您的代码可以用来编写日志消息。

有三种核心方法:

IsEnabled测试是否在该记录器上启用了日志级别;

Log是用于编写日志消息的核心日志记录方法;

BeginScope定义了一个日志范围。

有许多日志扩展方法构建在这个核心上;像LogInformation这样的常见方法只是围绕Log的包装器,带有适当的参数。

在内部,ILogger有一个“名称”(也称为“类别”)。其思想是,每个ILogger实例由应用程序的不同组件使用。

ILogger是提供核心日志功能的基本接口,但很少直接使用。有一些例外(例如,Azure函数将传递给您一个ILogger),但大多数时候您的代码将登录到ILogger<T>

ILogger

ILogger<T>是一个以T类型命名的记录器。发送到ILogger<T>的所有日志(带有默认实现)都将有一个记录器名称/ typeof(T).FullName类别。ILogger<T>是从ILogger派生的,没有添加新功能。

如果您使用依赖项注入,ILogger<T>的一个实例通常会注入到您的T类型中。因此,每次使用ILogger<T>的构造函数时,都要为应用程序定义一个“组件”。

差分的主要用法

如果要将数据记录为类型化日志(serilog等),可以使用ILogger< T>,或者想使用非类型化日志,只需使用ILogger

ASP.NET核心应用程序,鼓励您使用标准的Serilog接口,如LogILoggerLogContext,如果它们满足您的需要。

或者,您的应用程序可以通过依赖注入从框架中使用ILogger接口。Serilog实现了这个接口,因此从实际的角度来看,结果是相同的。

ILoggerFactory记录器工厂实例是日志记录系统的启动程序:它用于附加记录器提供程序和创建记录器实例--类型化(ILogger<T>)或非类型化(ILogger)。这些记录器实例将登录到所有已注册的记录器提供程序。

参考Ilogger最佳实践 & 测井的使用

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70355501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档