Использование getSimpleName () против getName () для получения регистратора - PullRequest
18 голосов
/ 30 ноября 2010

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

static public Logger getLogger(String name)

и

static public Logger getLogger(Class clazz)

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

Ответы [ 5 ]

23 голосов
/ 30 ноября 2010

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

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

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

com.foo.A
com.foo.B

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

log4j.logger.com.foo=DEBUG,CONSOLE
17 голосов
/ 21 ноября 2013

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

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

Будет выведено следующее

Name-->com.test.ShapeDemo
SimpleName-->ShapeDemo
5 голосов
/ 30 ноября 2010

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

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

4 голосов
/ 28 сентября 2016

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

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

Тем временем

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

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

2 голосов
/ 30 ноября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...