Создайте собственный интерфейс ведения журнала:
public interface IMyOwnLogger {
void Log(string message);
}
Создать реализацию:
public class NLogLogger : IMyOwnLogger {
void Log(string message) {
StackFrame frame = new StackFrame(1, false);
Logger logger = LogManager.GetLogger(frame.GetMethod().DeclaringType.FullName);
logger.Log(/*...*/);
}
}
Bind IMyOwnLoggerNLogLogger в вашем контейнере IOC.
- Внедрить, где необходимо (или использовать
IOC.Get<IMyOwnLogger>()
).
РЕДАКТИРОВАТЬ:
Идса прокомментировала потерю класса вызова.Помните, что вы всегда можете использовать трассировку стека:
var method = (new StackTrace()).GetFrame(1).GetMethod()
и извлекать оттуда вызывающий класс.
РЕДАКТИРОВАТЬ:
Вот как GetCurrentClassLogger
в NLog выглядит так, поэтому использование StackTrace в нашем классе не создает дополнительных издержек:
[MethodImpl(MethodImplOptions.NoInlining)]
public static Logger GetCurrentClassLogger()
{
#if SILVERLIGHT
StackFrame frame = new StackTrace().GetFrame(1);
#else
StackFrame frame = new StackFrame(1, false);
#endif
return globalFactory.GetLogger(frame.GetMethod().DeclaringType.FullName);
}