В повседневной разработке мы используем всевозможные библиотеки, часто (правильно!) Давая возможность понять, как это на самом деле работает. Но проникновение внутрь библиотек окупается, если мы раскрываем все концепции и маленькие уловки, о которых мы еще не знаем, добавляя их в наш арсенал для использования в наших ежедневных битвах.

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

Здесь на помощь приходит Древесина.

Я уже какое-то время использую Timber, всегда задаваясь вопросом, как Джейку Уортону удалось получить это имя класса! поэтому я решил выяснить это сам.

После клонирования библиотеки для Github я был немного удивлен, обнаружив, что вся библиотека, по сути, представляет собой просто ОДИН класс.

Да, пусть утонет.

Как указано на Github, Timber действует как оболочка поверх предоставленного Android класса Log.

Теперь вернемся к тому, как ему удается получить имя класса ...

И ответ ...

Трассировки стека.

Трассировка стека - это список вызовов методов, которые приложение выполняло при возникновении неперехваченного исключения.

Традиционно мы используем StackTrace для отладки ошибок и багов. Джейк, как всегда, очень умно использовал его для решения проблемы TAG.

Следующий метод getTag () создает новый объект Throwable и получает массив StackTrace.

Шестой элемент (а именно CALL_STACK_INDEX) в массиве - это класс, в котором мы создали журнал (Timber.d («взорвано сознание»);), тогда получение имени класса - легкая работа. .

Итак, это все! Довольно прямолинейно, правда?

Удачной регистрации !!