Мне кажется, что оболочка Castle NLogLogger, которая обертывает объект NLog Logger, не реализована, поэтому информация о месте вызова сохраняется.См. эту ссылку в репозиторий Castle для реализации оболочки.
Для полноты здесь приведен сокращенный пример реализации Castle:
public class NLogLogger : ILogger
{
public NLogLogger(Logger logger, NLogFactory factory)
{
Logger = logger;
Factory = factory;
}
internal NLogLogger() {}
public bool IsDebugEnabled
{
get { return Logger.IsDebugEnabled; }
}
public void Debug(string message)
{
Logger.Debug(message);
}
}
Ключпроблема заключается в том, что метод «Debug» (все остальные методы ведения журнала) использует соответствующие методы объекта NLog Logger.Методы ведения журнала в NLog Logger используют вызывающую функцию / метод в качестве сайта вызова (это не на 100% правильно, но это эффективно, что происходит в этом случае).Таким образом, в случае этой оболочки, сайт вызова будет реализацией оболочки NLog.Одним из правильных способов написания оболочки, чтобы сохранить сайт вызовов, является использование метода Log в NLog Logger, передавая Тип оболочки в качестве первого параметра.NLog будет подниматься вверх по стеку, пока тип MethodInfo не станет таким же, как тип, переданный в метод Log.Следующим методом в стеке будет сайт вызова.
Для правильного хранения информации сайта вызова метод отладки должен выглядеть примерно так:
public void Debug(string message)
{
LogEventInfo logEvent = new LogEventInfo(LogLevel.Debug, Logger.Name, message);
Logger.Log(typeof(NLogLogger), logEvent);
}
См. Эти ссылки наОтветы, которые я опубликовал в прошлом, о правильной упаковке Logler NLog так, что информация о сайте вызова сохраняется:
Как сохранить информацию о месте вызова при упаковке NLog
Nlog Callsite неверен, когда используется обертка
См. Также эту ссылку на исходный репозиторий NLog для некоторых примеров того, как расширить Logger NLog.