Альтернативы замене макросов в Java - PullRequest
0 голосов
/ 09 февраля 2011

У меня есть лог-оператор, в котором я всегда использую this.getClass().getSimpleName() в качестве 1-го параметра.Я хотел бы поместить это в какую-то макропостоянную и использовать это во всех моих операторах журнала.Но я узнал, что в Java нет такого простого механизма, как, например, в C ++.

Каков наилучший способ достижения такой функциональности в Java?

Мой пример операторов журнала (от Android) выглядитследует ..

Log.v(this.getClass().getSimpleName(),"Starting LocIden service...");

Ответы [ 4 ]

5 голосов
/ 09 февраля 2011

В Java нет макросов, но вы можете сделать свой код намного короче:

Log.v(this, "Starting LocIden service...");

А в классе Log:

public void v(Object object, String s)
{
    _v(object.getClass().getSimpleName(), s);
}

Другим подходом может быть проверкастек вызовов.

1 голос
/ 09 февраля 2011

Картик, большинство инструментов ведения журналов позволяют указать формат вывода, а одним из параметров является имя класса, в котором используется упомянутый метод Mark (проверка стека)

Например, в log4j параметр% C для ссылки на имя класса.

0 голосов
/ 09 февраля 2011

Используйте правильную структуру ведения журнала (например, slf4j).Каждый регистрирующий класс имеет свой собственный регистратор, поэтому нет необходимости передавать имя класса в вызов метода log.

Logger logger = LoggerFactory.getLogger(this.getClass());

logger.debug("Starting service");
//...
logger.debug("Service started");
0 голосов
/ 09 февраля 2011

Другой подход состоит в том, чтобы следовать тому, что android предлагает для своей функциональности регистрации.

Log.v(TAG, "Message");

, где TAG - частная статическая финальная строка в вашем классе.

...