Log.isLoggable возвращает неправильные значения? - PullRequest
14 голосов
/ 31 октября 2011

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

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

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

Ответы [ 4 ]

13 голосов
/ 11 декабря 2012

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

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

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

6 голосов
/ 31 октября 2011

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

2 голосов
/ 31 октября 2011

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

if (Log.isLoggable(TAG, Log.VERBOSE)) {
    Log.v(TAG, "verbose is active: " + Log.isLoggable(TAG, Log.VERBOSE));
}
0 голосов
/ 23 марта 2015

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

...