Ich versuche herauszufinden, was das richtige Muster und die richtige Verwendung von log4net mit einem Abhängigkeitsinjektionsframework ist.
Log4Net verwendet die ILog-Schnittstelle, erfordert jedoch einen Anruf
LogManager.GetLogger(Reflection.MethodBase.GetCurrentMethod().DeclaringType)
in jeder Klasse oder Methode, in der ich Informationen protokollieren muss. Dies scheint gegen die IoC-Prinzipien zu verstoßen und verbindet mich mit der Verwendung von Log4Net.
Sollte ich irgendwo eine andere Abstraktionsebene einfügen?
Außerdem muss ich benutzerdefinierte Eigenschaften wie den aktuellen Benutzernamen wie folgt protokollieren:
log4net.ThreadContext.Properties["userName"] = ApplicationCache.CurrentUserName;
Wie kann ich dies kapseln, damit ich nicht jedes Mal daran denken muss, es zu tun, und trotzdem die aktuelle Protokollierungsmethode beibehalten muss? soll ich so etwas machen oder verpasse ich die Marke total?
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);
}
}