Уровни входа в Android

У меня небольшие трудности с настройкой регистрации в Android. Вот как выглядит мой код:

    if (Log.isLoggable("MY_TAG", Log.VERBOSE)) {
        Log.v("MY_TAG", "Here's a log message");
    }

Довольно просто, правда?

Тем не менее, я испытываю немало трудностей с получением Log.isLoggable("MY_TAG", Log.VERBOSE) вернуть истину.

В http://developer.android.com/reference/android/util/Log.html я попытался добавить файл local.prop в каталог / data /, который выглядит следующим образом:

log.tag.MY_TAG=VERBOSE

но не повезло. Я также попробовал:

System.setProperty("log.tag.MY_TAG", String.valueOf(Log.VERBOSE));

но это тоже не работает.

Любые идеи о том, что я делаю здесь не так? Я использую Android 2.1-update1 на Nexus 1, если это что-то меняет.

3 ответа

Решение

Пытаться

adb shell setprop log.tag.MyAppTag VERBOSE

Похоже, что более поздние версии Android хотят /data/local.prop быть доступным для записи только пользователю root. adb push Появляется команда для первоначального создания файлов с предоставлением всем прав на чтение / запись (потому что маска файла по умолчанию 777). Android мудро игнорирует /data/local.prop так как это может быть угрозой безопасности.

Я только экспериментировал с Android 2.3.3 и 4.1.2. У первого нет проблем с чтением local.prop это доступно для записи, в то время как последний, кажется, молча игнорирует содержимое файла.

Создание local.prop файл, как описано в оригинальном вопросе:

log.tag.MY_TAG=VERBOSE

И затем, вставив его в устройство, как показано ниже, можно добиться цели:

adb push local.prop /data/local.prop
adb shell chmod 644 /data/local.prop
adb shell chown root.root /data/local.prop
adb reboot

Вы можете дважды проверить, чтобы убедиться, что значения в local.prop были прочитаны путем выполнения:

adb shell getprop | grep log.tag

Итак, в заключение:

  • /data/local.prop только чтение во время загрузки.
  • Более поздние версии Android, по-видимому, требуют, чтобы разрешения на /data/local.prop файл должен быть правильно установлен, иначе он не будет прочитан. Файл должен быть доступен для записи только пользователю root.

С помощью adb shell setprop log.tag.MyAppTag VERBOSE также работа. Проблема в том, что значения свойств теряются после перезагрузки.

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

Для этого я рекомендую размещать эти константы в начале каждого класса, для которого будут выполняться вызовы журнала:

static final boolean DEBUG = false;
static final String TAG = "<MyClass>"

Теперь, где вы входите, сделайте это:

if (DEBUG) Log.v(TAG, "Something");

Включите ваши журналы, изменив DEBUG постоянная к истине. (Если вы хотите, у вас может быть один класс с этими статиками для всего кода вашего приложения... Это имеет смысл для небольшого приложения, но по мере того, как все становится большим, приятно решить, какие части включить в систему.)

Делая это, когда вы создаете свое приложение с DEBUG = falseвесь код регистрации не только не выполняется, но и полностью удаляется из вашего приложения. Это хорошо, потому что позволяет оставить достаточно обширную регистрацию в вашем коде для включения, когда вам это нужно, не беспокоясь о том, как это повлияет на размер вашего приложения доставки. В основном, просто добавляйте журналы, где бы они вам не понадобились, и не беспокойтесь о том, чтобы оставить их.

Это подход, который используется во многих платформах Android. Например, Activity ManagerService.

Эти константы находятся вверху, и на их основе разбросаны различные строки журнала. (И куча других констант суб-отладки для различных его аспектов, так как этот файл смехотворно глупо велик.)

Другие вопросы по тегам