Почему регистратор log4j.getLogger() нужно передать тип класса?
Я прочитал несколько статей о том, как использовать log4j. Большинство из них дают ниже код в качестве начала:
Logger logger = Logger.getLogger("com.foo.Bar");
или
Logger logger = Logger.getLogger(XXX.class);
это инициализирует объект logger.Но мой вопрос в том, почему нужно отправить тип класса в качестве параметра? Кажется, когда я использую регистратор, мне все равно, в каком классе я использую it.So тип класса, похоже, не влияет на logger. Если я объявляю регистратор как статический и общедоступный, я могу вызвать этот регистратор в другом классе, так что намерение автора чтобы создать его таким образом? Будет ли тип класса связывать что-то, когда я использую регистратор? Или я могу отправить любые типы классов в функцию getLogger.
6 ответов:
вы всегда можете использовать любую строку в качестве имени регистратор иные, чем типа. Это определенно нормально.
причина, почему многие люди используют тип класса, мне кажется:
прост в использовании. Вам не нужно беспокоиться о дублировании имени регистратора в сложном приложении Java EE. Если другие люди также используют ваше имя регистратора, у вас может быть файл журнала, включающий не только вывод вашего класс;
легко проверить класс ведения журнала, так как имя регистратора будет отображаться в файле журнала. Вы можете быстро перейти к определенному классу;
когда вы распространяете свой класс, люди могут захотеть перенаправить ведение журнала из вашего класса в определенный файл или в другое место. В таком случае, если вы используете специальное имя регистратора, нам может потребоваться проверить исходный код или невозможно сделать это, если souce недоступный.
С документация:
Logger.getLogger(Class)
это сокращение дляgetLogger(clazz.getName())
. Соглашение, используемое с log4j и другими фреймворками ведения журнала, заключается в определении статического регистратора для каждого класса. Например,public class SomeClass { private static final Logger LOG = Logger.getLogger(SomeClass.class); ... }
я обнаружил, что это соглашение хорошо работает для организации вывода журнала. Это, конечно, не требуется, но это полезная практика.
1: Вы можете использовать "имя класса" или "имя строки" при определении в log4j.properties до, например,
log4j.logger.anything=INFO,anything
Итак,вы можете записать свой журнал как
Logger logger = Logger.getLogger("anything");
2: Если вы определяете некоторое имя журнала,то вы можете проверить его легко,cus они отдельно.
XXX.class это имя вашего регистратора, т. е. флаг последующих операторов журнала . Чтобы дать вам представление о том, к какому классу принадлежат определенные операторы журнала.
регистратор с именем класса не является обязательным, вы можете использовать свое собственное сообщение. Это конвенция для использования:
Logger logger = Logger.getLogger(XXX.class)
и полезно для отладки. Он будет регистрировать, какая строка кода выполняется.
вы можете отслеживать свой журнал по типу класса.
Пример 1:
public class Bar { Logger logger = Logger.getLogger("com.foo.Bar"); ... logger.debug("debug message"); }
возможно, вы можете увидеть ниже сообщение журнала.
DEBUG: **com.foo.Bar** debug message
example2:
public class Foo { Logger logger = Logger.getLogger("com.foo.Foo"); ... logger.debug("debug message"); }
возможно, вы можете увидеть ниже сообщение журнала.
DEBUG: **com.foo.Foo** debug message
если у вас много сообщений класса java и регистратора, слишком сложно найти, откуда берутся сообщения журнала.