我正在使用一个使用。NET核心构建的类库。库只有一个公共类,其中一个构造函数接受ILoggerFactory,另一个重载构造函数接受ILogger。但是我是在使用。NET Framework 4.7构建的控制台应用程序中使用这个库的。我的控制台应用程序使用Log4Net进行日志记录。但是我需要注入ILogger或ILoggerFactory的实例,以便类库根据我的log.config设置记录错误。
我试了如下
ILogger logger=new LoggerFactory()。CreateLogger();var contentManager=新的contentManager(记录器);
但是我不知道如何将Log4Net实例传递给LoggerFactory。
private static ILog _log = LogManager.GetLogger(typeof(Program));
static void Main(string[] args)
{
ILogger logger = new LoggerFactory().CreateLogger<ContentManager>();
var contentManager = new ContentManager(logger);
contentManager.Run();
}
我没有发现任何东西被记录,ContentManager也没有抛出任何异常。我知道ILogger实例对我的控制台应用程序中的Log4Net一无所知,我需要如何传递Log4Net实例?在这方面需要帮助。
尝试适配器模式以促进对Log4Net的委托。我不熟悉Log4Net,但我想您会理解这个示例:
class MyLoggerAdapter : Library.ILogger
{
private readonly ILog _delegation;
public MyLoggerAdapter(ILog delegation)
{
_delegation = delegation;
}
public void ILogger.Debug(string msg, params object[] p)
{
_delegation.Debug(msg, p);
}
}
那么在您的代码中,您可以这样做:
private static ILog _log = LogManager.GetLogger(typeof(Program));
static void Main(string[] args)
{
MyLoggerAdapter logAdapter = new MyLoggerAdapter(_log);
var contentManager = new ContentManager(logAdapter);
contentManager.Run();
}