Подтвердить что ты не робот

Использование getSimpleName() vs getName() для получения регистратора

Я видел код, который использует log4j, который получает logger для данного logger, используя

static public Logger getLogger(String name)

и

static public Logger getLogger(Class clazz)

с прежним api явно передан с getSimpleName(), а последний использует getName() на пройденном Class. Есть ли разница между этими двумя? Это повлияет, если я настрою различные пакеты для входа на другой уровень в файле log4j.properties?

4b9b3361

Ответ 1

Да, есть огромная разница.

Я никогда не использую simpleName для экземпляра Logger, поскольку он удаляет имя пакета. Помимо проблем, когда одно и то же имя класса существует в двух разных пакетах (что приводит к тому, что оба класса получают один и тот же экземпляр журнала), вы теряете способность управлять наследованием логгеров.

например. для двух регистраторов:

com.foo.A
com.foo.B

в свойствах, я могу просто иметь:

log4j.logger.com.foo=DEBUG,CONSOLE

Ответ 2

например. Мой класс ShapeDemo.java находится в пакете com.test, и я написал код, как показано ниже.

System.out.println("Name-->"+ShapeDemo.class.getName());
System.out.println("SimpleName-->"+ShapeDemo.class.getSimpleName());

Это будет выводиться после

Name-->com.test.ShapeDemo
SimpleName-->ShapeDemo

Ответ 3

Я предпочитаю использовать полное имя (Class.getName()). Когда пакеты организованы правильно, это позволяет настраивать log4j для обработки сообщений журнала, происходящих из разных частей дерева пакетов java.

Например, вы можете легко настроить все классы в пакетах, начиная с "com.mycompany.infra", чтобы использовать конкретный appender и регистрировать только сообщения уровня WARN или выше.

Ответ 4

Использование this.getClass(). getName();

Возвращает: alin.iwin.flickrbrowser.GetRawData​​p >

Между тем

private String LOG_TAG = this.getClass(). getSimpleName();

Только возврат: GetRawData.

Ответ 5

Вы можете запутаться, если у вас много классов с одним и тем же simpleName в разных пакетах. Наличие много логгеров с тем же именем не должно быть проблемой иначе - просто может быть запутанным.