L'avantage de la non-forme statique, c'est que vous pouvez les déclarer dans un (résumé) de la classe de base comme suit, sans se soucier que le droit classname:
protected Log log = new Log4JLogger(getClass());
Cependant, son inconvénient est bien sûr qu'un tout nouveau journal instance sera créée pour chaque instance de la classe. Cela ne peut pas en soi être coûteux, mais il ajoute une surcharge importante. Si vous voulez éviter cela, vous souhaitez utiliser l' static
formulaire. Mais son inconvénient est que vous devez le déclarer dans chaque classe individuelle et de prendre soin, dans chaque classe, que le droit classname été utilisés au cours de l'enregistreur de la construction parce qu' getClass()
ne peut pas être utilisé dans le contexte statique. Cependant, dans la moyenne des IDE, vous pouvez créer une saisie semi-automatique modèle pour cela. E. g. logger
+ ctrl+space
.
D'autre part, si vous obtenez l'enregistreur par une usine qui, à son tour, peut mettre en cache le déjà instancié bûcherons, puis à l'aide de la non-forme statique ne sera pas ajouter beaucoup de frais généraux. Log4j, par exemple, a un LogManager
pour ce but.
protected Log log = LogManager.getLogger(getClass());