Уровень журнала warn что это
OptaPlanner — Как быстро ведется регистрация?
Методология сравнения
Что приводит к выводу, как это:
Я запускал один и тот же набор тестов несколько раз с другим уровнем ведения журнала OptaPlanner :
Все остальные библиотеки (включая Drools ) были настроены на ведение журнала предупреждений. Детальность ведения журнала в OptaPlanner сильно различается на уровне:
Это необработанные контрольные цифры, измеряемые в подсчете вычисления среднего балла в секунду (чем выше, тем лучше):
Уровень ведения журнала | Облако 200с | Облако 800с | Машина Б1 | Машина B10 | Курс с7 | Курс с8 | Экзамен S2 | Экзамен S3 | Медсестра М1 | Медсестра mh1 | Sport nl14 |
---|---|---|---|---|---|---|---|---|---|---|---|
ошибка | 66065 | 61866 | 119230 | 32759 | 6282 | 8370 | 10330 | 7121 | 4001 | 3718 | 1248 |
предостерегать | 66943 | 62191 | 122678 | 32688 | 6297 | 8303 | 10517 | 7182 | 3942 | 3660 | 1278 |
Информация | 67393 | 63192 | 123734 | 32461 | 6188 | 8299 | 10330 | 7108 | 3944 | 3654 | 1252 |
отлаживать | 60254 | 55938 | 118917 | 32735 | 6054 | 8062 | 10310 | 7104 | 3904 | 3586 | 1244 |
след | 25159 | 25214 | 40346 | 20629 | 5585 | 7347 | 9229 | 6642 | 3360 | 3138 | 1156 |
Масштаб набора данных | 120k | 1920k | 500k | 250000k | 217k | 145k | 1705k | 1613k | 18k | 12k | 4k |
Алгоритм | Позднее принятие | Позднее принятие | Табу Поиск | Табу Поиск | Позднее принятие | Позднее принятие | Табу Поиск | Табу Поиск | Табу Поиск | Табу Поиск | Табу Поиск |
Я игнорирую разницу между ошибкой, предупреждением и регистрацией информации: разница не более 4%, прогоны воспроизводимы на 100%, и я не использовал компьютер во время бенчмаркинга, поэтому я полагаю, что в разнице можно обвинить компиляция точки доступа JIT или удача процессора.
Сколько стоит включение ведения журнала отладки или трассировки в производительности (в отличие от ведения журнала информации)?
Уровень ведения журнала | Облако 200с | Облако 800с | Машина Б1 | Машина B10 | Курс с7 | Курс с8 | Экзамен S2 | Экзамен S3 | Медсестра М1 | Медсестра mh1 | Sport nl14 |
---|---|---|---|---|---|---|---|---|---|---|---|
отлаживать | -10,59% | -11,48% | -3,89% | 0,84% | -2,17% | -2,86% | -0,19% | -0,06% | -1,01% | -1,86% | -0,64% |
след | -62,67% | -60,10% | -67,39% | -36,45% | -9,74% | -11,47% | -10,66% | -6,56% | -14,81% | -14,12% | -7,67% |
Масштаб набора данных | 120k | 1920k | 500k | 250000k | 217k | 145k | 1705k | 1613k | 18k | 12k | 4k |
Алгоритм | Позднее принятие | Позднее принятие | Табу Поиск | Табу Поиск | Позднее принятие | Позднее принятие | Табу Поиск | Табу Поиск | Табу Поиск | Табу Поиск | Табу Поиск |
Регистрация трассировки почти в 4 раза медленнее! Влияние ведения журнала отладки намного меньше, но все же заметно во многих случаях. Сценарии использования, использующие Late Acceptance (балансировка облачных вычислений и планирование курса), которые, следовательно, делают больше ведения журнала отладки, по-видимому, имеют более высокую потерю производительности (хотя это может быть в глазах смотрящего).
Но подождите секунду! В этих тестах используется консольный приложение. Что если они используют файловый аппендер, как в производстве?
Регистрация дополнений: добавление в консоль или файл
Уровни журнала Android
Android поддерживает различные уровни журналов, Verbose, Debug, Info, Warn и Error. Я понимаю, как работают уровни ведения журнала; Меня больше интересует типичный результат, ожидаемый для заданного уровня.
Например, при разработке приложения мне может быть любопытно, когда какой-то метод что-то делает (это часто бывает для целей отладки). Я просмотрю журналы, чтобы убедиться, что методы вызываются в ожидаемом порядке, если сетевой ответ – это то, что, как я думаю, должно быть, если парсеры найдут нужную информацию и т. Д.
Почему кто-то использует Verbose vs Debug vs Info?
С точки зрения разработчика, для первого, второго или стороннего приложения не все журналы для целей отладки? (Предполагая, что разработчики не смотрят журналы для удовольствия … Я не такой садистский)
С точки зрения потребителя, когда s *** попадает в вентилятор, и им необходимо обратиться в службу поддержки клиентов, потому что их супер важное / деловое приложение не работает, разработчик использует журнал для целей отладки.
Единственная причина, по которой я мог видеть использование подробностей или информации, – это, вероятно, операции сбора данных / хранилища данных. Если да, зачем использовать verbose vs info.
Не уверен. Если я злоупотребляю этим или если инфраструктура андроида …
Я в основном следую тому, что должен сказать Томаш Нуркевич при рассмотрении уровня ведения журнала:
ОШИБКА – случилось что-то ужасное, что нужно немедленно расследовать. Никакая система не может переносить элементы, зарегистрированные на этом уровне. Пример: NPE, недоступная база данных, критически важный случай использования не может быть продолжен.
WARN – процесс может быть продолжен, но проявляйте особую осторожность. Пример: «Приложение, запущенное в режиме разработки» или «Консоль администрирования не защищена паролем». Приложение может переносить предупреждающие сообщения, но они всегда должны быть оправданы и проверены.
INFO – Важный бизнес-процесс завершен. В идеальном мире администратор или продвинутый пользователь должен понимать сообщения INFO и быстро узнать, что делает приложение. Например, если заявка касается бронирования авиабилетов, в каждом билете должно быть только одно заявление INFO, в котором говорится: «[Кто] забронировал билет с [Где] до [Где]». Другое определение сообщения INFO: каждое действие значительно изменяет состояние приложения (обновление базы данных, внешний системный запрос).
VERBOSE – очень подробная информация, предназначенная только для разработки. Вы можете сохранять сообщения трассировки в течение короткого периода времени после развертывания в рабочей среде, но относить эти операторы журнала как временные, которые должны или могут быть отключены в конечном итоге. Различие между DEBUG и VERBOSE является наиболее сложным, но если вы поместите инструкцию регистрации и удалите ее после того, как функция была разработана и протестирована, она, вероятно, должна быть на уровне VERBOSE.
Мой самый любимый уровень – WTF (2.2+), который, как предполагается, будет означать «Какая ужасная неудача», для ситуаций, которые никогда не должны происходить.
Обычно я использую «информацию» для простых сообщений.
Русские Блоги
Журнал Android
За годы разработки Android я часто сталкиваюсь с таким явлением: в одном приложении часто используется несколько методов обработки журналов с разными стилями, что иногда сбивает с толку разработчиков. В то же время у автора часто возникают неоднозначные вопросы: существует несколько уровней журнала, какой уровень журнала используется при каких обстоятельствах? При каких обстоятельствах можно использовать журнал, как использовать журнал и почему? В Android так много журналов, как эффективно просматривать журналы? Помня об этих вопросах, автор произвел определенный вид использования журналов, основываясь на обычном опыте разработки, документах спецификации журналов компании и соответствующей информации в сети. Что касается самого основного использования и введения журнала, эта статья не будет вдаваться в подробности, я надеюсь, что эта статья может помочь некоторым людям, и я надеюсь, что большие коровы дадут лучшие мнения и предложения, которые помогут мне расти!
Основное содержание этой статьи таково:
1. Классификация журналов
1. Общий уровень журнала
Система Android предоставляет разработчикам хороший инструмент для ведения журнала android.util.Log. Существует 5 наиболее часто используемых методов, как показано ниже, а уровень вывода журнала также назначается 5 уровням по очереди:
(5) Log.e: e обозначает информацию об ошибке и обычно используется для вывода исключений и сообщений об ошибках. Журнал этого уровня будет выводить информацию только этого уровня. Как правило, система Android будет использовать этот уровень журнала при выводе фатальной информации, такой как грубость.
2. Связанный исходный код (на основе android-26, то же ниже)
Исходный код android.util.Log.java дает четкое описание уровня журнала, а также, в свою очередь, дает метод использования. Соответствующие фрагменты исходного кода следующие:
3. Интерпретация исходного кода
Помимо четких пояснений в примечаниях, мы также можем обратить внимание на дополнительную информацию
(1) Класс Log.java модифицируется с помощью final и не может быть унаследован. Он не имеет подклассов. В то же время он не наследует другие классы и не имеет родительского класса. Логическая взаимосвязь этого типа относительно проста и легко читается. Читатели имеют возможность прочитать исходный код и определенно получат более глубокое понимание.
(2) Видно, что уровень вывода журнала также включает ASSERT, а функция, используемая для вывода, также включает Log.wtf (. ) и т. Д. В исходном коде также упоминается, что обычно используются только пять вышеупомянутых уровней журнала. Для ASSERT Я не буду много говорить о Log.wtf () и т. Д., Просто разберитесь с ним, и нет необходимости использовать его при нормальной разработке.
(3) Уровни журнала находятся в порядке от 2 до 7. Странным явлением является то, что нет 0 и 1, и он не оценивается от 0 или 1. Что касается причин, читатели могут изучать, если им интересно.
(4) В комментарии перед именем класса также упоминается, что строка, переданная в журнал, будет потреблять системные издержки. Таким образом, мы не можем бесконтрольно использовать журнал, мы должны обращать внимание на навыки и характеристики использования.
Читатели могут узнать больше!
2. Спецификация использования журнала
У разных компаний разные требования и спецификации для использования Log.Далее я буду использовать спецификации, встреченные в ходе работы, чтобы проиллюстрировать спецификации использования Log (конечно, из комментариев к исходному коду в предыдущем разделе вы также можете увидеть некоторые подсказки. ):
1. В приложении журналы уровня VERBOSE, как правило, не допускаются. Для журналов уровня INFO и WARN разрешено печатать очень небольшой объем важной информации. Это требование в действии. На самом деле, эти три уровня часто используются в исходном коде системы. Например, Когда система печатает общую информацию об исключениях, используется журнал уровня WARN.
2. Уровень ERROR разрешается использовать только при очень серьезной ошибке.Если общая информация заключается в использовании уровня DEBUG (преимущества использования уровня DEBUG будут обсуждены позже, когда будет упомянуто Log.isLoggable ()). Когда система сообщает о критическом исключении, используется журнал уровня ОШИБКИ.
3. Запрещается распечатывать личную информацию пользователя, такую как IMEI, номер мобильного телефона, пароль, номер банковской карты и т. Д. В зарубежных странах некоторые законы также содержат строгие требования к содержанию журнала.
4. Не печатайте в журнале слишком много конкретных деталей реализации, поскольку это приведет к угадыванию дизайна архитектуры и реализации кода через журнал.
5. Детали основного алгоритма или механизма не могут быть отображены в журнале, например информация, связанная с основным алгоритмом, поток вызовов функций между приложениями и фреймворками и т. Д.
6. Запрещено печатать журнал в цикле. В условиях цикла, частых операциях, часто вызываемых интерфейсах, событиях ACTION_MOVE, повторной печати и т. Д. Использование журнала должно контролироваться. В единицу времени приложения разной природы предъявляют определенные требования к количеству журналов, и существуют определенные ограничения на размер каждого журнала. Из-за большого или частого журнала это оказывает определенное влияние на производительность приложения. Даже если есть переключатель журнала для управления выводом журнала, объединение строк потребует некоторой производительности и ресурсов.
7. Вы должны быть осторожны при печати захваченного стека исключений. Если вам не нужно распечатывать стек для определения проблемы, постарайтесь не печатать стек. Если стек действительно нужен, попробуйте контролировать частоту печати в том же стеке.
8. Старайтесь не изменять журнал, который идет с исходным кодом Android. В журнале событий категорически запрещено изменять журнал, поставляемый с исходным кодом.
9. Тег в журнале обычно называется в честь разделенного функционального модуля, и лучше использовать имя класса и имя метода в качестве префикса для информации журнала. Это сделано для облегчения позиционирования при просмотре журнала, что очень полезно для анализа проблем.
Вышеупомянутое не только включает спецификации использования, но также некоторые советы по использованию журнала. Некоторые из этих спецификаций различаются в зависимости от компании и разной степени строгости, а некоторые требуют единообразного соответствия их спецификациям. Читатели могут рассмотреть их в зависимости от конкретной ситуации.
В-третьих, просмотреть журнал в Android Studio
Android Studio предоставляет разработчикам хороший инструмент для просмотра журналов.Разработчики могут открыть представление журнала следующими способами: View> Tool Windows> Logcat или использовать комбинацию клавиш по умолчанию Alt + 6, чтобы открыть / скрыть представление Logcat. Вот краткое введение в использование этого инструмента.
1. Выберите условия фильтрации в Logcat.
На скриншоте ниже отмечены общие функции использования представления Logcat в Android Studio.Разработчики могут выбирать условия фильтрации в соответствии с реальной ситуацией.
2. Настройка цвета информации журнала.
При просмотре журналов есть небольшая хитрость: для просмотра журналов разных уровней Android Studio устанавливает разные цвета для информации журнала разных уровней. Разработчики также могут установить цвет или другие атрибуты в соответствии со своими предпочтениями, чтобы при просмотре журнала было легко различать уровень журнала, и при просмотре было ощущение иерархии. Путь настройки: Файл> Настройки> Редактор> Цвета и шрифты> Android Logcat. Как показано на скриншоте ниже:
После завершения настройки используйте следующий код для проверки
Информация журнала, напечатанная в представлении logcat, выглядит следующим образом:
Хотя разработчики могут устанавливать цвет журнала и другие атрибуты в соответствии со своими предпочтениями, автор по-прежнему рекомендует читателям стараться следовать соглашениям об общих именах, например, Журналы с уровнем ERROR часто имеют красный цвет 。
3. Описание информации журнала в Logcat
В-четвертых, напишите простой в использовании вспомогательный класс Log.
Базовые навыки использования журнала легко освоить, но есть еще много навыков, которые необходимо освоить, если их можно гибко использовать в проектах.
1. Сценарии, с которыми часто сталкиваются разработчики
При конкретной разработке разработчики часто сталкиваются со следующими ситуациями:
(1) При отладке часто печатается большое количество журналов, чтобы помочь в анализе проблем, но эти журналы должны быть закрыты, когда версия должна быть выпущена для пользователей.
(2) Разработчики часто устанавливают переменную в коде, например логическое isDebug и т. Д., Для управления печатью / закрытием журнала. Но каждый раз, когда вы выпускаете версию, вам нужно вручную изменять это значение, что неудобно в использовании и легко забыть.
(3) Для пользовательской версии, выпущенной для пользователей, журнал закрывается. Когда необходимо проанализировать ошибку, в журнале содержится слишком мало информации, из-за чего разработчики часто думают, что «умелые женщины не могут готовить без риса», что не способствует анализу проблемы.
(4) После получения информации журнала часто бывает непросто выяснить, к какой функции относится эта информация, к какому типу и каким методом она распечатывает.
(5) Некоторые журналы необходимо закрыть в пользовательской версии, но некоторые журналы необходимо хранить все время, и эти два типа журналов нужно обрабатывать по-разному.
Подобные обстоятельства, по-видимому, постоянно испытывают разработчики.
2. Код вспомогательного инструмента
Опытные разработчики обычно пишут вспомогательный класс Log, чтобы максимально избежать этих проблем.Автор также суммировал набор кодов во время разработки, как показано в следующем коде:
3. Использование и описание вспомогательных классов.
(1) Распечатать основной журнал
Согласно комментариям в коде, должно быть легко понять использование и значение этих методов. Кратко продемонстрируем пример использования
Вызовите Logger.d (className, methodName, msg) в том месте, где журнал должен быть напечатан; вот и все, ниже показан выходной журнал
(2) Стек вызовов функции печати printStackTraceInfo
(3) Распечатать информацию об исключении printExceptionInfo (Exception pEx)
Этот метод в основном используется для печати собранной информации об исключении. На снимке экрана ниже четко показана причина исключения, место его возникновения и стек вызовов. SDK также поставляется с методом e.printStackTrace (), который печатается самой системой (снимок экрана 2). Однако информация для печати делится на несколько частей информации для печати. При поиске по тегу можно искать только информацию, содержащую тег, и информация не может быть отображена в целом. Пользовательский метод преодолевает этот момент и удобен для всех. Посмотреть. Конечно, читатели могут выбирать, использовать ли функции, входящие в SDK, в соответствии со своими предпочтениями.
Снимок экрана 1: Индивидуальные распечатки отклонений от нормы
Снимок экрана 2: Аномальная печать, связанная с sdk
(4) Используйте Log.isLoggable (tagName, level)
В пункте 1 (3) данного обзора упоминается, что журнал отладочной версии закрыт в пользовательской версии, что значительно затрудняет анализ ошибки. Следовательно, в условии isTagLoggable (. ) для определения того, разрешить ли печать журнала, добавляется условие «или», Log.isLoggable (тег, уровень), которое решает проблему невозможности распечатать часть журнала в пользовательской версии.
1) Основное использование
После добавления этого условия в системе пользовательских версий просто выполните следующую команду в командном поле:
После ввода этой команды будут выведены все журналы с именем «FunctionName» в качестве имени тега и уровнем DEBUG и выше. Чтобы вернуться в состояние, не предназначенное для печати, просто перезагрузите телефон.
2) Связанный исходный код
3) Интерпретация исходного кода
Основываясь на приведенном выше исходном коде и комментариях, автор извлек некоторую информацию:
Ниже приводится тестовая функция.
5) Результаты тестирования
А) Никакая команда не выполняется, результат теста:
В) Выполнение заказа
Здесь мы также видим, что значение Log.isLoggable (TAG, Log.DEBUG) по умолчанию ложно. Как мы упоминали во втором пункте, когда мы говорили о спецификации использования журнала во втором разделе, общая информация печатается с журналом уровня DEBUG в сочетании с приведенным выше вспомогательным классом журнала, вы, конечно же, можете почувствовать некоторые преимущества здесь, читатели Вы также можете использовать эти условия для разработки собственных удобных методов в соответствии с вашим собственным пониманием.
6) Рекомендуемая литература
Пять, получение журнала
После разработки стратегии ввода журнала вы можете получить журнал. В основном есть следующие способы получить журнал, с которым контактировал автор
1. Получено из средств разработки.
Например, представление Logcat, которое поставляется с упомянутой выше Android Studio, также доступно в eclipse, что проще в использовании. Этот метод в основном используется разработчиками, а тестировщики обычно не используют аналогичные инструменты в среде IDE.
2. adb поставляется с инструментом logcat
Командная функция также относительно мощна, ее очень удобно использовать, не требуется дополнительных IDE, adb настроен на компьютере, подключен к мобильному телефону, и вы можете ввести команду в поле команд. Этот инструмент также имеет множество команд и мощных функций.К сожалению, я не часто использую эту функцию. В основном я использую собственные инструменты IDE и мобильный журнал мобильного телефона.
3. Мобильный телефон имеет собственную функцию записи журнала.
Как правило, мобильные телефоны также поставляются с инструментами для записи журналов. Различные марки и модели имеют разные способы захвата системных журналов и форматов журналов. Ниже приведен пример определенной модели Biya.
(1) Введите пароль на клавиатуре набора номера (вы можете выполнять поиск в Интернете, разные бренды имеют разные пароли, и типы журналов, регистрируемых на одном мобильном телефоне, также различны), и вы войдете в интерфейс инструмента журнала, как показано ниже:
(2) Перед использованием нажмите кнопку «Очистить», чтобы очистить предыдущие файлы журналов, чтобы не создавать слишком много ненужных журналов и не влиять на просмотр полезной информации.
(3) Нажмите кнопку «Пуск», и система начнет сбор журналов.
(4) Начните управлять мобильным телефоном, воспроизводите ошибки и т. Д. Журналы, созданные в этот период, будут сохранены.
(5) После завершения операции нажмите кнопку «Закрыть», и система сгенерирует файл журнала.Внизу вы можете увидеть путь хранения журнала, просто найдите его по этому пути.
Шесть, просмотр и анализ журнала
После того, как вы получите файл журнала, вы можете проанализировать его. В средстве просмотра IDE Logcat и журнале, полученном в adb logcat, в основном доступно основное представление, поэтому я не буду здесь об этом говорить. Здесь мы в основном говорим об анализе журнала в MobileLog.
1. Структура документа
После входа в папку журнала вы увидите следующий список папок
Если MobileLog включен, перезагружая телефон или перезагружая его после паузы, будет создана новая папка журнала. Разработчики начинают анализ с самого последнего журнала повторения ошибок. После выбора папки журнала в течение определенного периода времени нажмите, и вы увидите следующий интерфейс
Как правило, мы обращаем внимание только на содержимое папки moblie (пока автор использовал только файлы в этом каталоге). После нажатия для входа отобразится список файлов журнала, как показано ниже:
2. Анализируйте файлы журналов
(1) Сводка файла журнала
Имя файла содержит модель, информацию о версии и тип журнала в файле. Как правило, нам нужно обращать внимание только на файлы сбоя и основные файлы, а иногда и на файлы системного журнала.
(2) Проанализировать журнал сбоев.
В файле сбоя вы можете четко увидеть время, когда произошел сбой, процесс, вызвавший сбой, и имя пакета. Обратите внимание на время сбоя: если разница во времени между сценой и сценой, которую вы воспроизводите, велика (например, более 10 минут), это может не иметь большой корреляции с проблемой, которую вы хотите анализировать.
(3) Проанализировать основной файл журнала
Основной файл часто содержит много информации журнала. Представление logcat или журнал, записанный adb logcat, упомянутый ранее, а также различные типы журналов в разных моделях мобильных телефонов имеют в основном одинаковую базовую структуру. Одно сообщение также содержит такую информацию, как дата, время, номер процесса, номер потока, уровень журнала, ТЕГ, сообщение и т. Д. Как показано ниже:
Анализируя эти журналы, автор упоминает здесь несколько часто используемых советов:
Автор также изучает и изучает навыки анализа MobileLog. Здесь мы будем медленно накапливать опыт, обобщать и медленно обновлять.
3. Анализ исходного кода
В исходном коде есть следующие коды
Исходный код также дает ровно 5 значений LOG_ID, LOG_ID_MAIN
LOG_ID_CRASH.За исключением журнала событий, остальные также находятся во взаимно однозначном соответствии. Реализация методов Log.v ()
Семь сторонних инструментов
В настоящее время существует множество отличных сторонних инструментов для управления журналами. Я использовал два: log4j и Tencent’s bugly, оба из которых относительно просты в использовании.
8. Заключение