【问题标题】:Log4Net on .Net Standard has no version for getting logger without repository.Net Standard 上的 Log4Net 没有用于在没有存储库的情况下获取记录器的版本
【发布时间】:2019-04-09 06:35:33
【问题描述】:

我正在尝试将项目迁移到 .net 标准,它基本上是一个类库。 我正在使用 log4net 进行日志记录,并且我正在使用该方法

public static ILog GetLogger(string name);

由于这是一个被多个项目引用的库,因此不应定义存储库,因为每个项目引用该库时,都会定义它自己的日志存储库。 在移植到 .Net 标准时如何规避这个问题?

【问题讨论】:

  • 你应该使用ILog。请改用Microsoft.Extensions.Logging.Abstractions 接口并将它们配置为使用log4net 作为实际的记录器。您不能强制库的用户使用 Log4Net。日志记录抽象也已成为事实上的标准,这意味着 NuGet 包已经支持它们
  • This answer 展示了将 log4net 与日志抽象集成是多么容易。然后,您可以使用 DI 将适当的记录器注入每个类并避免静态记录器实例

标签: c# log4net .net-standard


【解决方案1】:

GetLogger的实现很简单:

public static ILog GetLogger(string name)
{
    return GetLogger(Assembly.GetCallingAssembly(), name);
}

假设您想使用类库的程序集,您可以轻松地为此编写自己的辅助方法:

private static ILog GetLogger(string name) =>
    LogManager.GetLogger(typeof(SomeTypeInYourLibrary).Assembly, name);

它基本上是将程序集硬编码为“包含您指定类型的程序集”,无论如何,从您的库中调用GetLogger(string) 总是会得到这样的结果。

【讨论】:

  • 不错。 Jon Skeet 再次交付 :)
猜你喜欢
  • 2019-03-29
  • 1970-01-01
  • 1970-01-01
  • 2011-06-09
  • 2010-11-17
  • 2013-04-05
  • 1970-01-01
  • 2011-12-24
相关资源
最近更新 更多