Обратите внимание, что если ваш класс логгера действительно является оболочкой для каркаса журналирования (например, log4net или NLog), каркас журналирования может быть настроен для получения вызывающего класса / метода для вас.Чтобы это работало правильно, вы должны правильно обернуть структуру ведения журнала.Для NLog и log4net правильная упаковка (для сохранения информации сайта вызовов) обычно включает использование метода «Log» (а не вариантов Error, Warn, Info и т. Д.) И передачу «типа регистратора» в качестве первого параметра.«Тип регистратора» - это тип вашего регистратора, который оборачивает регистратор инфраструктуры ведения журнала.
Вот один из способов обернуть NLog ( взято отсюда ):
class MyLogger
{
private Logger _logger;
public MyLogger(string name)
{
_logger = LogManager.GetLogger(name);
}
public void WriteMessage(string message)
{
///
/// create log event from the passed message
///
LogEventInfo logEvent = new LogEventInfo(LogLevel.Info, _logger.Name, message);
// Call the Log() method. It is important to pass typeof(MyLogger) as the
// first parameter. If you don't, ${callsite} and other callstack-related
// layout renderers will not work properly.
//
_logger.Log(typeof(MyLogger), logEvent);
}
}
А вот как вы могли бы сделать это с log4net:
class MyLogger
{
private ILog _logger;
public MyLogger(string name)
{
_logger = LogManager.GetLogger(name);
}
public void WriteMessage(string message)
{
// Call the Log() method. It is important to pass typeof(MyLogger) as the
// first parameter. If you don't, ${callsite} and other callstack-related
// formatters will not work properly.
//
_logger.Log(typeof(MyLogger), LogLevel.Info, message);
}
}