Log4a
Log4a — это высокопроизводительная и высокодоступная структура сбора логов, основанная на mmap.
В Log4a в качестве кэша используется отображение файла в памяти с помощью mmap, что позволяет максимально гарантировать целостность логов без ущерба для производительности. Сначала логи записываются в отображённый в памяти файл, а при последующем запуске Log4a они переписываются обратно в файл логов.
Для разработчиков мобильных приложений анализ логов иногда является необходимым средством решения проблем, которые трудно воспроизвести по отзывам пользователей. Однако сбор логов всегда был сложной задачей, поскольку невозможно одновременно обеспечить высокую производительность и целостность данных.
Чтобы достичь высокой производительности при сборе логов, необходимо использовать большой объём памяти: сначала записывать логи в память, а затем в подходящее время переносить их в файловую систему (flush). Если процесс будет принудительно завершён до выполнения flush, содержимое памяти будет потеряно.
Запись логов в файлы в реальном времени обеспечивает их целостность, но запись файлов требует переключения между пользовательским режимом и режимом ядра, что занимает больше времени, чем прямая запись в память. Частое выполнение операций записи файлов в потоке пользовательского интерфейса может привести к зависанию приложения и ухудшению взаимодействия с пользователем.
Создайте har-пакет с помощью library и добавьте его в папку libs целевого проекта. В файле entry/gradle добавьте следующий код:
implementation fileTree(dir: 'libs', include: ['*.jar', '*.har'])
Добавьте следующие строки во все проекты:
allprojects{
repositories{
mavenCentral()
}
}
implementation "com.gitee.archermind-ti:Log4a:1.0.0"
Настройте и инициализируйте Log4a. Подробнее см. здесь: https://gitee.com/archermind-ti/log4a/blob/master/entry/src/main/java/me/pqpo/log4a/LogInit.java.
Используйте следующим образом:
Log4a.i(TAG, "Hello,Log4a!");
Выберите подходящий момент для обновления кэша или освобождения памяти.
Чтобы обновить кэш при выходе из приложения, используйте:
Log4a.flush();
Для освобождения памяти вызовите метод release(). При следующем использовании потребуется повторная инициализация.
Код для тестирования производительности находится в папке entry. Были протестированы Log4a, HiLog, прямая запись в память (сохранение содержимого логов в ArrayList), запись логов в реальном времени и запись с использованием BufferOutputStream.
Анализ результатов теста показал, что производительность Log4a при записи логов уступает только прямой записи в память и сопоставима с записью с использованием BufferOutputStream. Для обеспечения безопасности потоков в Log4a используется блокировка при записи в mmap-память. Без блокировки скорость была бы ближе к скорости прямой записи.
BufferOutputStream сначала сохраняет данные в памяти, а потом переносит их в файл. Если данные не были записаны в файл до сбоя питания или принудительного завершения процесса, они будут утеряны. Log4a восстанавливает файл логов при следующем запуске, обеспечивая целостность данных.
Часть исходного кода для iOS не была перенесена, так как функциональность демонстрационных примеров для Android и iOS одинакова. Был реализован только пример для Android.
Copyright 2017 pqpo Licensed under the Apache License, Version 2.0 (the «License»); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an «AS IS» BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )