Estoy tratando de averiguar cuál es el patrón y el uso correctos de log4net con un marco de inyección de dependencia.
Log4Net usa la interfaz ILog pero requiere que llame
LogManager.GetLogger(Reflection.MethodBase.GetCurrentMethod().DeclaringType)
en cada clase o método donde necesito registrar información. Esto parece ir en contra de los principios de IoC y me une al uso de Log4Net.
¿Debería de alguna manera poner otra capa de abstracción en alguna parte?
Además, necesito registrar propiedades personalizadas como el nombre de usuario actual como este:
log4net.ThreadContext.Properties["userName"] = ApplicationCache.CurrentUserName;
¿Cómo puedo encapsular esto para que no tenga que recordar hacerlo cada vez y aún así mantener el método actual que está registrando? ¿Debo hacer algo como esto o me estoy equivocando totalmente?
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);
}
}