Я намагаюся зрозуміти, яким правильним є шаблон і використання 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);
}
}