C# .Net标准上的Log4Net没有用于获取没有存储库的记录器的版本

C# .Net标准上的Log4Net没有用于获取没有存储库的记录器的版本,c#,log4net,.net-standard,C#,Log4net,.net Standard,我正在尝试将一个项目迁移到.net标准,它基本上是一个类库。 我使用log4net进行日志记录,我使用的是 public static ILog GetLogger(string name); 由于这是一个由多个项目引用的库,所以不应该定义存储库,因为每个引用此库的项目都定义了自己的存储库以进行日志记录。 在移植到.Net标准时,如何避免这个问题?GetLogger的实现非常简单: public static ILog GetLogger(string name) { return G

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

public static ILog GetLogger(string name);
由于这是一个由多个项目引用的库,所以不应该定义存储库,因为每个引用此库的项目都定义了自己的存储库以进行日志记录。
在移植到.Net标准时,如何避免这个问题?

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)
始终可以得到的。

您可能不应该使用
ILog
。改用
Microsoft.Extensions.Logging.Abstractions
接口,并将它们配置为使用log4net作为实际的记录器。您不能强制库的用户使用Log4Net。日志抽象也已经成为事实上的标准,这意味着支持它们的NuGet包已经显示了将log4net与日志抽象集成是多么容易。然后,您可以使用DI向每个类注入适当的记录器,并避免静态记录器instancesNice。乔恩·斯基特再次发表讲话:)