小编Max*_*tin的帖子

如何从库代码使用 Microsoft.Extensions.Logging?

我很难理解在通用库中使用 Microsoft.Extensions.Logging 的最佳方法是什么。

使用 NLog,您可以执行以下操作:

public class MyClass
{
    private static readonly NLog.Logger Logger = NLog.LogManager.GetCurrentClassLogger();

    public void foo()
    {
        Logger.Info("foo");
    }
}
Run Code Online (Sandbox Code Playgroud)

你完成了!您让客户端配置其目标,但这不再是您的问题。

但是使用 Microsoft.Extensions.Logging 代码看起来更像:

public class MyClass
{
    private readonly Ilogger Logger;

    public MyClass(ILogger<MyClass> logger)
    {
        Logger = logger;
    }

    public void foo()
    {
        Logger.LogInformation("foo");
    }
}
Run Code Online (Sandbox Code Playgroud)

所以现在我需要在 ctor 上传递一个 ILogger。
好吧没问题我可以从 ILoggerFactory 得到一个。
现在我需要一个 ILoggerFactory。

  • 我从哪里获得 ILoggerFactory?我只是为我的图书馆创建了一个全局的?
  • 客户端将如何配置工厂添加他想要的 ILoggerProvider?
  • 如果客户端正确地完成了它的配置, ILoggerFactory 会自动配置正确的提供者吗?

这听起来是错误的,因为在库代码中创建 LoggerFactory 需要引用 Microsoft.Extensions.Logging 而你应该只引用 Microsoft.Extensions.Logging.Abstractions。这是代码异味的线索。

当您在 ASP.Net Core 应用程序或服务中但想要一个可以在控制台应用程序或 WinForm/WPF 应用程序中使用的通用库时,构造函数中的依赖注入看起来不错?

  • 如果客户端库没有通用主机或不使用依赖注入怎么办?

那么现在客户端现在需要传递一个 …

c# logging

18
推荐指数
1
解决办法
1570
查看次数

标签 统计

c# ×1

logging ×1