Уровни входа в Android - PullRequest
       12

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

25 голосов
/ 08 ноября 2010

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

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

Довольно просто, не так ли?

Однако у меня довольно большие трудности с получением Log.isLoggable("MY_TAG", Log.VERBOSE) для возврата в true.

За 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 ]

30 голосов
/ 08 ноября 2010

Попробуйте

adb shell setprop log.tag.MyAppTag VERBOSE
20 голосов
/ 01 сентября 2013

Кажется, что в более поздних версиях 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 также работает.Проблема заключается в том, что значения свойств теряются после перезагрузки.

9 голосов
/ 09 ноября 2010

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

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

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

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

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

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

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

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

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

...