Смотрите мой ответ на этот вопрос:
Проблема с определенным именем регистратора NLog
Я скопировал пример кода (для сокращенной оболочки NLog) из этого ответа, чтобы избежать некоторых проблем:
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);
}
}
Обратите внимание, что этот ответ был дан в контексте NInject. Тот же принцип применяется к переносу NLog, даже если вы не используете NInject. Ключ сообщает NLog тип вашей оболочки.
Это пример того, как правильно написать оболочку NLog (т. Е. Для поддержки информации сайта вызова). Ключ находится в методе записи. Обратите внимание, как он использует метод журнала NLog. Также обратите внимание, что в качестве первого параметра передается тип класса-оболочки. NLog использует информацию о типе для навигации по стеку вызовов. Как только он видит метод, для которого DeclaringType является передаваемым типом (то есть типом оболочки), он знает, что следующий кадр в стеке является вызывающим методом.
Также см. Эту ссылку (на исходный репозиторий NLog), где приведены еще два примера "расширения" Logger. Один за перенос, другой за наследование:
https://github.com/jkowalski/NLog/tree/master/examples/ExtendingLoggers
Я не уверен на 100%, но я думаю, что вы не можете просто обернуть NLog и делегировать метод Info, Debug, Warn и т. Д. NLog следующим образом:
class MyNLogWrapper
{
private readonly Logger logger = LogManager.GetCurrentClassLogger();
public void Info(string msg)
{
logger.Info(msg);
}
}
Вам нужен способ сообщить NLog тип вашей оболочки, и я думаю, что вы можете сделать это, только вызвав NLog через метод Logger.Log (перегружен).
Если это недостаточно полезно, опубликуйте свою обертку для получения дополнительной помощи.