Использование getSimpleName() vs getName() для получения регистратора
Я видел код, который использует log4j
, который получает logger
для данного logger
, используя
static public Logger getLogger(String name)
и
static public Logger getLogger(Class clazz)
с прежним api явно передан с getSimpleName()
, а последний использует getName()
на пройденном Class
. Есть ли разница между этими двумя? Это повлияет, если я настрою различные пакеты для входа на другой уровень в файле log4j.properties?
Ответы
Ответ 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.GetRawDatap >
Между тем
private String LOG_TAG = this.getClass(). getSimpleName();
Только возврат: GetRawData.
Ответ 5
Вы можете запутаться, если у вас много классов с одним и тем же simpleName
в разных пакетах. Наличие много логгеров с тем же именем не должно быть проблемой иначе - просто может быть запутанным.