Возвращает ли Log.isLoggable неправильные значения?

Когда я писал оболочку журнала для своего приложения для Android, я заметил странное поведение метода Android Log.isLoggable. Выполнение следующего кода:

final String TAG = "Test";
Log.v(TAG, "verbose is active: " + Log.isLoggable(TAG, Log.VERBOSE));
Log.d(TAG, "debug is active: " + Log.isLoggable(TAG, Log.DEBUG));
Log.i(TAG, "info is active: " + Log.isLoggable(TAG, Log.INFO));
Log.w(TAG, "warn is active: " + Log.isLoggable(TAG, Log.WARN));
Log.e(TAG, "error is active: " + Log.isLoggable(TAG, Log.ERROR));

производит следующий вывод LogCat:

VERBOSE/Test(598): verbose is active: false
DEBUG/Test(598): debug is active: false
INFO/Test(598): info is active: true
WARN/Test(598): warn is active: true
ERROR/Test(598): error is active: true

Почему я получаю подробные сведения, а отладка не активна, хотя я создаю эти выходные данные, используя подробный журнал и журнал отладки?


person Xeno Lupus    schedule 30.10.2011    source источник


Ответы (4)


Все уровни журнала записываются в logcat независимо от текущего уровня журнала. Метод isLogabble() можно использовать для оптимизации ваших приложений, чтобы предотвратить отправку ненужных операторов журнала в logcat. Вы также можете использовать команду adb logcat для фильтрации подмножества уровней ведения журнала, даже если для ведения журнала установлено подробное (см. https://developer.android.com/studio/debug/am-logcat.html).

person Nic Strong    schedule 30.10.2011

Если вы прочитали информацию на Log.isLoggable(), вы заметите, что уровень ведения журнала по умолчанию — INFO. Все, что меньше этого (DEBUG и VERBOSE), приведет к тому, что этот метод вернет false. Вот почему ваш результирующий вывод показывает эти два как false.

Все вызовы Log.* регистрируются в logcat. Вызов Log.isLoggable() — это просто способ настроить ведение журнала. Это не требуется. Как правило, вы вызываете Log.isLoggable() до фактического вызова Log.*, чтобы определить, регистрировать его или нет.

Вы можете настроить ведение журнала на TAG, если хотите, либо с помощью файла prop, либо через adb. Хорошая вещь в этом заключается в том, что вы можете динамически включать/выключать/отключать ведение журнала для каждого отдельного TAG в вашем приложении без необходимости вручную комментировать строки журнала или реализовывать свои собственные проверки.

person Alther    schedule 10.12.2012

Вы должны использовать

if (Log.isLoggable(TAG, Log.VERBOSE)) {
    Log.v(TAG, "verbose is active: " + Log.isLoggable(TAG, Log.VERBOSE));
}
person Diego Torres Milano    schedule 30.10.2011

LOG всегда будет печататься в logcat независимо от того, что возвращает Log.isloggable().

person howerknea    schedule 23.03.2015