(预先致歉,也许我在这里缺少MS .NET Logging的新功能。 )
LibLog(https://github.com/damianh/LibLog)是否支持Microsoft.Extensions.Logging
framework?
我相信它们是相互竞争的抽象,但想知道两者是否可以对齐。
背景是如何在C#库项目中最佳实现抽象日志记录。我们的客户更喜欢将Microsoft.Extensions.Logging
与 Serilog 一起使用。他们不喜欢将Logger实例传递给每个类构造函数,尽管使用了诸如AutoFac和Microsoft DI之类的DI框架。 LibLog
正是提供此功能,因此我们希望对此进行扩展。
问题:
LibLog(https://github.com/damianh/LibLog)是否支持Microsoft.Extensions.Logging框架?
创建自定义广告是否存在任何问题
Microsoft.Extensions.Logging.ILogger<T>
个包装器类
ILog
(位于LibLog中),如果可以的话,该如何在LibLog中完成并实现?
Microsoft.Extensions.Logging
框架是否支持任何
可以检索类的Logger实例的选项
没有将其传递给构造函数?那里可能存在线程和上下文问题?
我的客户强加在整个库类中使用的记录器实例必须实现接口Microsoft.Extensions.Logging.ILogger<T>
。
我们更喜欢LibLog的原因简化了日志记录,如下所示:
将Microsoft.Extensions.Logging.ILogger<T>
的实例作为构造函数参数传递给每个类。
public class Cat
{
ILogger<Cat> Logger { get; }
//pass in a logger instance
public Cat(ILogger<Cat> logger) => Logger = logger;
public string MakeSound()
{
Logger.LogInformation("Cat is going to meow now...");
return "Meow!";
}
}
即使在依赖注入的帮助下,是否也必须通过接受此ILogger<T>
实例来污染库类? LibLog样式的静态方法/成员可以返回该类的Logger实例吗?
LibLog框架提供了一种更简单的方法,因为它无需通过Logger传递给任何类,因为它可以通过静态成员使用:
public class Cat
{
ILog Logger { get; }
//LibLog provides the logger via static method, no need to pass in.
public Cat() => Logger = LogProvider.For<Cat>()
public string MakeSound()
{
Logger.Info("Cat is going to meow now...");
return "Meow!";
}
}