6
我应该将ILogger,ILogger <T>,ILoggerFactory或ILoggerProvider用于库吗?
这可能与将ILogger或ILoggerFactory传递给AspNet Core中的构造函数有关吗?,但这是专门针对库设计的,而不是有关使用这些库的实际应用程序如何实现其日志记录的。 我正在编写一个将通过Nuget安装的.net Standard 2.0库,并且为了允许使用该库的人们获得一些调试信息,我依赖于Microsoft.Extensions.Logging.Abstractions来允许注入标准化的Logger。 但是,我看到了多个接口,并且网络上的示例代码有时ILoggerFactory会在类的ctor中使用并创建一个记录器。还有ILoggerProvider一个看起来像是Factory的只读版本,但是实现可能会也可能不会实现这两个接口,因此我不得不选择。(工厂似乎比提供程序更常见)。 我见过的某些代码使用非泛型ILogger接口,甚至可能共享同一记录器的一个实例,而某些代码采用了一个ILogger<T>ctor,并期望DI容器支持开放的泛型类型或ILogger<T>我的库中每个变体的显式注册。用途。 现在,我确实认为这ILogger<T>是正确的方法,也许是不采用该参数而仅通过Null Logger的ctor。这样,如果不需要日志记录,则不使用任何日志记录。但是,某些DI容器会选择最大的ctor,因此无论如何都会失败。 我很好奇我在这里应该做的事情,以便为用户带来最少的麻烦,同时在需要时仍允许适当的日志记录支持。