1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/archermind-ti-log4a

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Log4a

Log4a — это высокопроизводительная и высокодоступная структура сбора логов, основанная на mmap.

Почему Log4a?

В Log4a в качестве кэша используется отображение файла в памяти с помощью mmap, что позволяет максимально гарантировать целостность логов без ущерба для производительности. Сначала логи записываются в отображённый в памяти файл, а при последующем запуске Log4a они переписываются обратно в файл логов.

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

Чтобы достичь высокой производительности при сборе логов, необходимо использовать большой объём памяти: сначала записывать логи в память, а затем в подходящее время переносить их в файловую систему (flush). Если процесс будет принудительно завершён до выполнения flush, содержимое памяти будет потеряно.

Запись логов в файлы в реальном времени обеспечивает их целостность, но запись файлов требует переключения между пользовательским режимом и режимом ядра, что занимает больше времени, чем прямая запись в память. Частое выполнение операций записи файлов в потоке пользовательского интерфейса может привести к зависанию приложения и ухудшению взаимодействия с пользователем.

Интеграция

Метод 1: прямое использование har-пакета

Создайте har-пакет с помощью library и добавьте его в папку libs целевого проекта. В файле entry/gradle добавьте следующий код:

implementation fileTree(dir: 'libs', include: ['*.jar', '*.har'])

Метод 2: gradle-зависимость

Добавьте следующие строки во все проекты:

allprojects{
    repositories{
        mavenCentral()
    }
}
implementation "com.gitee.archermind-ti:Log4a:1.0.0"

Использование

  1. Настройте и инициализируйте Log4a. Подробнее см. здесь: https://gitee.com/archermind-ti/log4a/blob/master/entry/src/main/java/me/pqpo/log4a/LogInit.java.

  2. Используйте следующим образом:

    Log4a.i(TAG, "Hello,Log4a!");
  3. Выберите подходящий момент для обновления кэша или освобождения памяти.

    • Чтобы обновить кэш при выходе из приложения, используйте:

      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 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
Apache-2.0
Отмена

Обновления (1)

все

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/archermind-ti-log4a.git
git@api.gitlife.ru:oschina-mirror/archermind-ti-log4a.git
oschina-mirror
archermind-ti-log4a
archermind-ti-log4a
master