См. Мой ответ на этот вопрос, где приведен пример написания оболочки для NLog:
Nlog Callsite неверен при использовании оболочки
Чтобы сэкономить время, я скопировал код здесь:
class NLogLogger : ILogger
{
private NLog.Logger logger;
//The Type that is passed in is ultimately the type of the current object that
//Ninject is creating. In the case of my example, it is Class1 and Class1 is
//dependent on ILogger.
public NLogLogger(Type t)
{
logger = NLog.LogManager.GetLogger(t.FullName);
}
//Trace, Warn, Error, Fatal eliminated for brevity
public bool IsInfoEnabled { get { return logger.IsInfoEnabled; } }
public bool IsDebugEnabled { get { return logger.IsDebugEnabled; } }
public void Info(string format, params object [] args)
{
if (logger.IsInfoEnabled)
{
Write(LogLevel.Info, format, args);
}
}
public void Debug(string format, params object [] args)
{
if (logger.IsDebugEnabled)
{
Write(LogLevel.Debug, format, args);
}
}
private void Write(LogLevel level, string format, params object [] args)
{
LogEventInfo le = new LogEventInfo(level, logger.Name, null, format, args);
logger.Log(typeof(NLogLogger), le);
}
}
Этот пример был написан специально для контекста вопроса, который касался упаковки NLog для использования с NInject.
Перейдите по ссылке, чтобы получить более подробное объяснение того, почему это работает и почему не работают более наивные подходы.
Также, смотрите эту ссылку для примеров (от разработчика NLog) того, как обернуть NLog:
https://github.com/jkowalski/NLog/tree/master/examples/ExtendingLoggers
Наконец, рассмотрите возможность использования Common.Logging для .NET в качестве абстракции ведения журнала или в качестве примера написания абстракции ведения журнала.