对于.Net库类,LibLog是否可以与Microsoft.Extensions.Logging Framework一起使用并提供ILogger <T>实例?

时间:2019-08-21 14:07:08

标签: logging .net-core liblog

(预先致歉,也许我在这里缺少MS .NET Logging的新功能。 )

LibLoghttps://github.com/damianh/LibLog)是否支持Microsoft.Extensions.Logging framework

我相信它们是相互竞争的抽象,但想知道两者是否可以对齐。

背景是如何在C#库项目中最佳实现抽象日志记录。我们的客户更喜欢将Microsoft.Extensions.Logging Serilog 一起使用。他们不喜欢将Logger实例传递给每个类构造函数,尽管使用了诸如AutoFac和Microsoft DI之类的DI框架。 LibLog正是提供此功能,因此我们希望对此进行扩展。

问题:

  1. LibLog(https://github.com/damianh/LibLog)是否支持Microsoft.Extensions.Logging框架?

  2. 创建自定义广告是否存在任何问题 Microsoft.Extensions.Logging.ILogger<T>个包装器类 ILog(位于LibLog中),如果可以的话,该如何在LibLog中完成并实现?

  3. Microsoft.Extensions.Logging框架是否支持任何     可以检索类的Logger实例的选项     没有将其传递给构造函数?那里可能存在线程和上下文问题?

我的客户强加在整个库类中使用的记录器实例必须实现接口Microsoft.Extensions.Logging.ILogger<T>

我们更喜欢LibLog的原因简化了日志记录,如下所示:

使用标准的Microsoft日志记录框架

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

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!";
    }
}

0 个答案:

没有答案