У меня есть много операторов записи для отладки, например.
Log.v(TAG, "Message here");
Log.w(TAG, " WARNING HERE");
при развертывании этого приложения на телефоне устройства я хочу отключить подробное ведение журнала, откуда я могу включить / отключить ведение журнала.
Ответы:
Распространенным способом является создание int с именем loglevel и определение его уровня отладки на основе loglevel.
Позже вы можете просто изменить LOGLEVEL для всех уровней вывода отладки.
источник
Android Документация говорит следующее о Log Levels :
Таким образом, вы можете захотеть убрать из журнала подробные записи журналирования, возможно, используя ProGuard, как предложено в другом ответе .
Согласно документации, вы можете настроить ведение журнала на устройстве разработки, используя Свойства системы. Свойство множества ,
log.tag.<YourTag>
и он должен быть установлен в одно из следующих значений:VERBOSE
,DEBUG
,INFO
,WARN
,ERROR
,ASSERT
, илиSUPPRESS
. Более подробная информация об этом доступна в документации поisLoggable()
методу.Вы можете установить свойства временно с помощью
setprop
команды. Например:Кроме того, вы можете указать их в файле /data/local.prop следующим образом:
Более поздние версии Android требуют, чтобы /data/local.prop был только для чтения . Этот файл читается во время загрузки, поэтому вам нужно будет перезагрузить его после обновления. Если
/data/local.prop
он доступен для записи в мире, он, вероятно, будет проигнорирован.Наконец, вы можете установить их программно, используя
System.setProperty()
метод .источник
android.util.Config
констант, которые устарели. Жестко закодированные значения, указанные в документации API, бесполезны, так как они (предположительно) различаются в зависимости от сборки. Поэтому маршрут ProGuard казался нам лучшим решением.Самый простой способ, вероятно, состоит в том, чтобы запустить ваш скомпилированный JAR через ProGuard перед развертыванием с такой конфигурацией, как:
Это, помимо всех других оптимизаций ProGuard, удалит все подробные операторы журнала непосредственно из байт-кода.
источник
Я выбрал простой путь - создание класса-оболочки, который также использует списки переменных параметров.
источник
Лучший способ - использовать SLF4J API + некоторые его реализации.
Для приложений Android вы можете использовать следующее:
источник
logback-android
(так какlogback
правильное несовместимо).logback-android-1.0.10-1.jar
составляет 429 КБ, что не так уж и плохо, учитывая предоставленные функции, но большинство разработчиков в любом случае используют Proguard для оптимизации своего приложения.Вы должны использовать
источник
Удаление журналирования с помощью proguard (см. Ответ от @Christopher) было простым и быстрым, но это приводило к тому, что трассировки стека из производства не соответствовали источнику, если в файле была какая-либо запись отладки.
Вместо этого, вот техника, которая использует разные уровни ведения журнала в разработке и производстве, предполагая, что Proguard используется только в производстве. Он распознает производственный процесс, видя, переименовал ли proguard данное имя класса (в примере я использую «com.foo.Bar» - вы бы заменили его на полное имя класса, которое, как вы знаете, будет переименовано proguard).
Эта техника использует регистрацию общего достояния.
источник
Log4j или slf4j также могут быть использованы в качестве каркасов ведения журналов в Android вместе с logcat. Смотрите поддержку проекта android-logging-log4j или log4j в android
источник
Существует небольшая замена стандартного класса журнала Android - https://github.com/zserge/log.
По сути, все, что вам нужно сделать, это заменить импорт из
android.util.Log
вtrikita.log.Log
. Затем в вашемApplication.onCreate()
или в каком-либо статическом инициализаторе проверьтеBuilConfig.DEBUG
флаг или любой другой и используйтеLog.level(Log.D)
или,Log.level(Log.E)
чтобы изменить минимальный уровень журнала. Вы можете использовать,Log.useLog(false)
чтобы отключить ведение журнала на всех.источник
Может быть, вы можете увидеть этот класс расширения журнала: https://github.com/dbauduin/Android-Tools/tree/master/logs .
Это позволяет вам точно контролировать журналы. Например, вы можете отключить все журналы или только журналы некоторых пакетов или классов.
Более того, он добавляет некоторые полезные функции (например, вам не нужно передавать тег для каждого журнала).
источник
Я создал Utility / Wrapper, который решает эту проблему + другие распространенные проблемы, связанные с ведением журнала.
Утилита отладки со следующими функциями:
Как пользоваться?
Я попытался сделать документацию самодостаточной.
Предложения по улучшению этой утилиты приветствуются.
Бесплатно использовать / поделиться.
Загрузите его с GitHub .
источник
Вот более сложное решение. Вы получите полную трассировку стека, и метод toString () будет вызываться только при необходимости (Performance). Атрибут BuildConfig.DEBUG будет иметь значение false в рабочем режиме, поэтому все журналы трассировки и отладки будут удалены. Компилятор горячих точек имеет возможность удалить вызовы из-за конечных статических свойств.
используйте как это:
источник
В очень простом сценарии ведения журнала, когда вы буквально просто пытаетесь записать данные на консоль во время разработки для целей отладки, может быть проще всего выполнить поиск и замену перед сборкой и закомментировать все обращения к журналу или системе. out.println.
Например, если вы не использовали «Журнал». В любом месте, кроме вызова Log.d или Log.e и т. д., вы можете просто найти и заменить все решение, чтобы заменить «Журнал». с "// Log." чтобы закомментировать все ваши звонки в журнале, или в моем случае я просто использую System.out.println везде, поэтому перед тем, как перейти к производству, я просто сделаю полный поиск и заменит «System.out.println» и заменит на "//System.out.println".
Я знаю, что это не идеально, и было бы неплохо, если бы в Eclipse была встроена возможность находить и комментировать вызовы Log и System.out.println, но пока это не произойдет, самый простой и быстрый и лучший способ сделать это закомментировать при поиске и замене. Если вы сделаете это, вам не придется беспокоиться о несоответствии номеров строк трассировки стека, потому что вы редактируете свой исходный код и не добавляете никаких накладных расходов, проверяя некоторую конфигурацию уровня журнала и т. Д.
источник
В моих приложениях у меня есть класс, который оборачивает класс Log, который имеет статическую логическую переменную, называемую «state». Во всем моем коде я проверяю значение переменной «state» статическим методом, прежде чем записывать его в журнал. Затем у меня есть статический метод для установки переменной «состояние», которая гарантирует, что значение является общим для всех экземпляров, созданных приложением. Это означает, что я могу включить или отключить все журналы для приложения в один вызов - даже когда приложение работает. Полезно для звонков в службу поддержки ... Это означает, что вы должны придерживаться своего оружия при отладке и не возвращаться к использованию стандартного класса Log, хотя ...
Также полезно (удобно), что Java интерпретирует логическое значение var как false, если ему не было присвоено значение, что означает, что его можно оставить равным false до тех пор, пока вам не потребуется включить ведение журнала :-)
источник
Мы можем использовать класс
Log
в нашем локальном компоненте и определить методы как v / i / e / d. На основании необходимости мы можем сделать звонок дальше.Пример показан ниже.
здесь сообщение для
string
и иargs
является значением, которое вы хотите напечатать.источник
Для меня часто полезно иметь возможность устанавливать разные уровни журнала для каждой TAG.
Я использую этот очень простой класс оболочки:
Теперь просто установите уровень журнала для каждого тега в начале каждого класса:
источник
Другой способ - использовать платформу регистрации, которая имеет возможность открывать и закрывать журналы. Это может дать большую гибкость иногда даже для производственного приложения, журналы которого должны быть открыты, а какие закрыты, в зависимости от того, какие у вас проблемы, например:
источник