В посте « Переносимые имена логгеров с дескрипторами методов Java 7 » я писал об использовании дескрипторов методов Java 7 для именования логгеров классов. В этом посте я заявил, что преимущества этого подхода включают согласованность в именовании регистратора и предотвращение случайного копирования и вставки кода, которые могут привести к тому, что имя другого класса используется для имени регистратора. В этой статье я расскажу о том, как Log4j 2 обеспечивает подход для достижения этих же преимуществ.
Log4j 2 признает распространенный подход к именованию регистраторов, основанных на именах классов. Раздел « Имена регистраторов » страницы « Log4j 2 API » в Руководстве по Log4j 2 гласит: «В большинстве случаев приложения присваивают имена своим регистраторам, передавая имя текущего класса в LogManager.getLogger. Поскольку это использование очень распространено, Log4j 2 предоставляет его как значение по умолчанию, когда параметр имени регистратора либо пропущен, либо имеет значение null ».
Следующий очень простой класс Calculator демонстрирует это, создав Logger с LogManager без параметров . вызов getLogger () . Поскольку ни один параметр не передается getLogger() , логгер будет назван в честь класса, в котором он создан. Комментарий Javadoc для метода LogManager.getLogger () подтверждает следующее: «Возвращает Logger с именем вызывающего класса».
Calculator.java
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
package dustin.examples.log4j;import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;import java.util.Arrays;/** * Simple calculator class that is intended more for demonstration * of Log4j2 than for calculating anything. */public class Calculator{ private static final Logger logger = LogManager.getLogger(); public String getLoggerName() { return logger.getName(); } /** * Add the provided operands together and provide their sum. * * @param operands Operands to be added together. * @return Sum of the provided operands. */ public long add(final long ... operands) { long sum = 0; for (final long operand : operands) { sum += operand; } logger.debug("The sum of " + Arrays.toString(operands) + " is " + sum); return sum; }} |
С классом Calculator реализованным, как показано выше, имя регистратора класса, доступное по вызову Logger.getName (), как показано в методе Calculator getLoggerName() , представляет собой «dustin.examples.log4j.Calculator». Хотя здесь это и не показано, Logger полученный с помощью LogManager.getFormatterLogger () без параметров , также будет использовать «полное имя вызывающего класса в качестве имени Logger».
Вывод
Подход Log4j 2, обсужденный и продемонстрированный в этом посте, для именования регистраторов прост в использовании и позволяет легко иметь согласованные и правильные имена регистраторов, предполагая, что выбранная схема именования регистратора должна использовать полностью определенное имя пакета и класса. Этот подход является более коротким и, возможно, даже более читабельным, чем метод обрабатывает подход к именованию регистраторов , но этот подход специфичен для Log4j 2, в то время как метод обработки метода может использоваться с несколькими каркасами и библиотеками журналирования.
| Ссылка: | Простое и последовательное именование Log4j2 Logger от нашего партнера JCG Дастина Маркса в блоге Inspired by Actual Events . |