Преимущество нестатической формы заключается в том, что вы можете объявить ее в (абстрактном) базовом классе следующим образом, не беспокоясь о том, что будет использовано правильное имя класса:
protected Log log = new Log4JLogger(getClass());
Однако его недостатком, очевидно, является то, что для каждого экземпляра класса будет создан новый экземпляр журнала. Это само по себе может быть не дорого, но добавляет значительных накладных расходов. Если вы хотите избежать этого, вы должны вместо этого использовать форму static
. Но его недостаток, в свою очередь, заключается в том, что вы должны объявлять его в каждом отдельном классе и следить за тем, чтобы в каждом классе использовалось правильное имя класса при создании логгера, поскольку getClass()
нельзя использовать в статическом контексте. Однако в средней IDE вы можете создать шаблон автозаполнения для этого. Например. logger
+ ctrl+space
.
С другой стороны, если вы получаете регистратор фабрикой, которая, в свою очередь, может кэшировать уже созданные экземпляры регистраторов, то использование нестатической формы не приведет к дополнительным расходам. Log4j, например, имеет LogManager
для этой цели.
protected Log log = LogManager.getLogger(getClass());