Apple System Log предоставляет широкие возможности для логирования, среди прочего, разделение логирумой информации по типу важности (debug, notice, error и др.) и хранение важных логов на устройстве (notice и важнее).
NSLog логирует всю информацию с уровнем warning, что несколько сужает возможности логирования, а также приводит к тому, что все логи, записанные через NSLog, хранятся на устройстве. Это усложняет изучение логов (их слишком много и все одного типа) и может привести к утечке конфиденциальных данных.
Репозиторий содержит набор макросов для логирования в iOS с использованием Crashlytics (для удалённого логирования) для решения этой проблемы и повышения удобства и эффективности логирования.
Для установки нужно добавить в проект VSLogging.h и следующие зависимые библиотеки:
- MWLogging -- используется непосредственно для логирования (как обёртка для Apple System Log);
- Crashlytics -- для удалённого логирования (отправки логов в Fabric).
Удобно включить #import "VSLogging.h"
в precompiled header, чтобы не подключать заголовок в каждый файл.
Есть три режима -- DEBUG, ADHOC, RELEASE, -- от которых зависит поведение функций логирования. Они задаются макросами (#define DEBUG 1
). Макросы должны быть непротиворечивыми: только один макрос должен быть равен 1. Исключение -- RELEASE -- явно нигде не используется. Если !DEBUG и !ADHOC, то RELEASE. Режимы удобно настроить в соответствующих build configurations.
- VSLogDebug работает только в DEBUG. Информация только выводится в консоль -- не хранится на устройстве или удалённо. Предназначен для вывода отладочной информации во время дебага.
- VSLogWarning в ADHOC хранит информацию на устройстве и логирует удалённо в Crashlytics. Предназначен для логирования отладочной информации во время (бета-)тестирования.
- VSLogError логирует информацию на устройство и удалённо. Предназначен для логирования информации, которую может увидеть конечный пользователь ("Database Error", "Network Error" и т.д.). При использовании нужно соблюдать осторожность: не логировать конфиденциальную информацию.
- VSAssert в DEBUG и RELEASE работает как NSAssert. (По умолчанию, NSAssert в RELEASE не делает ничего.) В ADHOC проверяет условие и при его ложности логирует сообщение об ошибке с использованием VSLogWarning.
VSLogDebug(@"Initializing database...");
NSError *error;
if(![VSDatabase initWithError:&error])
{
VSLogError(@"Error while initializing database: %@", error.localizedDescription);
}
VSLogDebug(@"Done");