Parece más limpio declarar un registrador y llamar al LogManager.GetLogger
en una clase base para que todos los herederos puedan usarlo. Sin embargo, en el sitio log4net y otros blogs como en this blog post se afirma que es mejor declarar un registrador por clase porque:¿Debo declarar log4net logger una vez por clase o en la clase base?
Puede utilizar los registradores de esta manera para aislar problemas de registro a través de sus objetos, y estoy totalmente de recomendar hazlo. Esto le permitirá acelerar y dirigir la salida de registro de los registradores individuales utilizando el mecanismo de configuración jerárquica de log4net.
Esto significa que si lo pongo en la clase base, ¿hará que ese registrador sea un cuello de botella?
Si es así, ¿hay otras soluciones o solo tengo que crear un registrador por clase?
OP está utilizando log4net. Aunque una clase de registrador es una de las pocas ocasiones en que el patrón singleton es útil, el uso de un registrador diferente por clase mejora tremendamente la resolución de problemas: puede configurar detalladamente qué nivel de mensajes registrar para cada clase por separado. También puede enviar mensajes desde diferentes registradores a diferentes destinos (archivo de texto, registro de eventos, correo electrónico). Recomiendo usar una biblioteca así. Si un registrador se instancia de forma estática (una vez por tipo), la diferencia de rendimiento es insignificante. (no mi voto a la baja, sin embargo) – Groo
Su singleton no es seguro para subprocesos, por lo que podría terminar con diferentes instancias de Logger (en el caso de un registrador probablemente no sea un problema importante, pero vale la pena señalarlo). Además, para iniciar sesión probablemente no le interese este patrón ya que es un poco más lento (ya que tiene que hacer un control nulo adicional ... de nuevo probablemente no sea un gran problema, pero vale la pena señalarlo). –
¿No estás familiarizado con log4net? –