Por que a maioria dos exemplos de log4net obtém o registrador de uma classe fazendo isso:
private static ILog logger =
LogManager.GetLogger(
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
Em vez de apenas passar typeof (MyClass):
private static ILog logger = LogManager.GetLogger(typeof(MyClass));
Existe algum outro motivo para fazer isso, além do fato de que a primeira opção não exige que você digite um nome de classe específico?
Sou um usuário NLog e geralmente isso se resume a:
Pareceu um pouco estranho que você precise passar por reflexão no Log4Net, então eu dei uma olhada no código-fonte do NLog e, vejam só, isso é o que eles fazem por você:
Acho que escreveria algo semelhante para Log4Net como uma extensão ou método estático em vez de colar o reflexo como parte do meu código de caldeira :)
fonte
Como você disse - é conveniente porque você pode criar um logger em um método sem saber o nome da classe (trivial, eu sei), mas permite que você recorte e cole métodos entre as classes sem ter que renomear a chamada.
fonte
Acho que o motivo é que você obtém o tipo do tipo de tempo de execução usando o
.DeclaringType()
método. Você pode usar o logger em uma classe base e ainda ver o tipo real de seu objeto na saída dos loggers. Isso torna as investigações muito mais convenientes.fonte
Também torna mais fácil criar modelos Codesmith para fins de geração de código.
fonte