ILogger<T>和ILogger有什么区别?下面是Sample类使用ILogger的两种方法,其中一种是最好的,原因是什么!
方法1
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
public class Sample
{
private readonly ILogger _logger;
public Sample(ILogger logger)
{
_logger = logger;
}
public void DoSomething()
{
_logger.LogInformation("The answer is {number}", 42);
}
}发布于 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接口,如Log、ILogger和LogContext,如果它们满足您的需要。
或者,您的应用程序可以通过依赖注入从框架中使用ILogger接口。Serilog实现了这个接口,因此从实际的角度来看,结果是相同的。
ILoggerFactory记录器工厂实例是日志记录系统的启动程序:它用于附加记录器提供程序和创建记录器实例--类型化(ILogger<T>)或非类型化(ILogger)。这些记录器实例将登录到所有已注册的记录器提供程序。
参考Ilogger最佳实践 & 测井的使用
https://stackoverflow.com/questions/70355501
复制相似问题