¿Por qué la mayoría de los ejemplos de log4net obtienen el registrador para una clase haciendo esto?
private static ILog logger =
LogManager.GetLogger(
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
En lugar de simplemente pasar typeof (MyClass):
private static ILog logger = LogManager.GetLogger(typeof(MyClass));
¿Hay alguna otra razón para hacer esto, además del hecho de que la primera opción no requiere que escriba un nombre de clase específico?
Soy un usuario de NLog y, por lo general, esto se reduce a:
Parecía un poco extraño que debas pasar por la reflexión en Log4Net, así que eché un vistazo al código fuente de NLog, y he aquí, esto es lo que hacen por ti:
Supongo que escribiría algo similar para Log4Net como una extensión o método estático en lugar de pegar el reflejo como parte de mi código de caldera :)
fuente
Como usted dice, es conveniente ya que puede crear un registrador en un método sin saber el nombre de la clase (trivial, lo sé), pero le permite cortar y pegar métodos entre clases sin tener que cambiar el nombre de la llamada.
fuente
Creo que la razón es que obtienes el tipo de tipo de tiempo de ejecución usando el
.DeclaringType()
método. Puede usar el registrador en una clase base y aún ver el tipo real de su objeto en la salida del registrador. Eso hace que las investigaciones sean mucho más convenientes.fuente
También facilita la creación de plantillas de Codesmith con fines de generación de código.
fuente