Уровни ведения журнала для Android

у меня возникли некоторые трудности с настройкой ведения журнала Android. Вот как выглядит мой код:

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

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

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

Per http://developer.android.com/reference/android/util/Log.html, я попытался Добавить локальный.файл 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

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

я экспериментировал только с Android 2.3.3, и 4.1.2. У первого нет проблем с чтением a 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, как представляется, требуют, чтобы разрешения на должен быть правильно установлен, или он не будет читать. Файл должен быть доступен для записи только суперпользователю.

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


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

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

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

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

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

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

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

это подход, который принимает много рамок Android. Например,ManagerService Активность.

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