Я пытаюсь выяснить, что такое правильное использование и использование log4net с инфраструктурой инъекций зависимостей.
Log4Net использует интерфейс ILog, но мне требуется позвонить
LogManager.GetLogger(Reflection.MethodBase.GetCurrentMethod().DeclaringType)
в каждом классе или методе, где мне нужно записывать информацию. Это, похоже, противоречит принципам IoC и связывает меня с использованием Log4Net.
Должен ли я каким-то образом разместить другой слой абстракции?
Кроме того, мне нужно регистрировать настраиваемые свойства, такие как текущее имя пользователя, как это:
log4net.ThreadContext.Properties["userName"] = ApplicationCache.CurrentUserName;
Как я могу инкапсулировать это, чтобы мне не приходилось делать это каждый раз и все еще поддерживать текущий метод, который регистрируется. должен ли я сделать что-то вроде этого или я полностью не пропускаю отметку?
public static class Logger
{
public static void LogException(Type declaringType, string message, Exception ex)
{
log4net.ThreadContext.Properties["userName"] = ApplicationCache.CurrentUserName;
ILog log = LogManager.GetLogger(declaringType);
log.Error(message, ex);
}
}