Manière générique de getLogger à partir de log4j.Logger
Au lieu de spécifier le nom de la classe sur chaque classe:
log = Logger.getLogger(Foo.class);
log = Logger.getLogger(Bar.class);
log = Logger.getLogger(Test.class);
Qu'il sera autorisé à utiliser :
log = Logger.getLogger(this.getClass());
Quelles en seront les implications?
source d'informationauteur user648026
Vous devez vous connecter pour publier un commentaire.
Si vous créez une sous-classe, le journal des messages vont être connecté à la sous-classe de l'enregistreur.
.
.
Dans l'exemple ci-dessus, "Faire quelque chose" va se connecté à la pkgtwo.Sous-type de logger au lieu de pkgone.SuperType enregistreur, qui peut ou peut ne pas être ce que vous voulez.
Si vous ne voulez pas de répéter à faire le
logger
et que vous voulez éviter d'écrire un mauvais nom de la classe, il y a @Log de Projet De Lombok.Si vous n'avez pas l'esprit à l'aide d'une bibliothèque dans votre projet, vous pouvez simplement ajouter un enregistreur avec une simple annotation.
Essayer cette façon de chercher une classe générique...
La meilleure partie est que vous pouvez utiliser cette méthode de façon statique.
Assurer que semble bien.
Être conscient que l'une des conséquences est que si vous pouvez avoir des problèmes avec le journal à partir d'un contexte statique, Il ne peut pas être initialisé ou il peut ne pas être visible
+1 pour sublass instances qui appellent une super méthode, l'enregistreur seront de la sous-classe.
Aussi, si vous appliquez ce qu'un enregistrement de modèle pour vos cours, si votre classe est abstraite - votre ce.getClass échouera comme vous n'avez pas une instance de cette classe.
À l'aide du journal de l'usine de Apache commons:
N'avez pas à faire autre chose. Pas sûr LogFactory était disponible au moment de la question post.
Si vous ne souhaitez pas utiliser LogFactory vous pouvez aussi tout simplement utiliser la finale privée avec le getClass().
Pas de raison de créer des sous-classes, sauf si vous voulez une hiérarchie de votre enregistrement, qui pourrait également être fait avec la manipulation de la configuration de l'enregistrement d'un fichier (log4j.xml si c'est ce que vous utilisez). Vous ne pouvez pas l'utiliser.getClass() quand l'instrument est défini comme statique. Sans statique ou privé final vous laissez l'enregistreur ouvrir à de dangereux changements possibles qui vous ne voulez pas.
Il n'y a pas de conséquences que je sais. Comme par Matt commentaire, je suppose, c'est le bon comportement qui tout le monde le veut.