Pourquoi la plupart des exemples de log4net obtiennent-ils le logger d'une classe en faisant ceci:
private static ILog logger =
LogManager.GetLogger(
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
Plutôt que de simplement passer typeof (MyClass):
private static ILog logger = LogManager.GetLogger(typeof(MyClass));
Y a-t-il une autre raison de faire cela, outre le fait que la première option ne vous oblige pas à taper un nom de classe spécifique?
Je suis un utilisateur de NLog, et cela se résume généralement à:
Il m'a semblé un peu étrange que vous ayez besoin de réfléchir dans Log4Net, j'ai donc jeté un coup d'œil dans le code source de NLog, et voilà, voici ce qu'ils font pour vous:
Je suppose que j'écrirais quelque chose de similaire pour Log4Net en tant qu'extension ou méthode statique au lieu de coller la réflexion dans le cadre de mon code de chaudière :)
la source
Comme vous le dites - c'est pratique car vous pouvez créer un enregistreur dans une méthode sans connaître le nom de la classe (trivial je sais) mais vous permet de couper et coller des méthodes entre les classes sans avoir à renommer l'appel.
la source
Je pense que la raison est que vous obtenez le type du type d'exécution à l'aide de la
.DeclaringType()
méthode. Vous pouvez utiliser l'enregistreur dans une classe de base et toujours voir le type réel de votre objet dans la sortie des enregistreurs. Cela rend les enquêtes beaucoup plus pratiques.la source
Cela facilite également la création de modèles Codesmith à des fins de génération de code.
la source