Предполагается, что он очень эффективен и так далее.
Самым большим ограничением является то, что:
В iOS очень ограничены возможности чтения системного журнала. В настоящее время
приложение iOS может читать только записи, созданные этим конкретным процессом,
используя область .currentProcessIdentifier. Это раздражает, если, скажем,
приложение вышло из строя, и вы хотите знать, что оно делало до сбоя.
Что вам нужно, так это способ получить все записи журнала, записанные вашим приложением (r.57880434).
Источник: «Ваш друг, системный журнал».
Чтобы пользователи могли отправлять журналы для определенный период даже в случае сбоев я не мог найдите лучшее решение, кроме как дублировать ведение журнала в набор файлов с ротацией. Если бы у Logger был какой-то делегат, который выглядел бы лучшим вариантом для выполнения дополнительной работы в нужное время, но, к сожалению, это не так.
Для совместимости я решил создайте регистратор, который имеет точно такие же сигнатуры функций, что и системный OSLog Logger.
Поскольку Logger является структурой, я не могу наследовать его и переопределить его функции для внедрения журналирования файлов вместе с унаследовал системное ведение журналов.
Поэтому я решил обернуть Logger в другую структуру HybrydLogger и просто скопировать исходные функции с их сигнатурами, например: HybrydLogger p>
Код: Выделить всё
public func error(_ message: OSLogMessage) {
osLogger.error("\(message.description)")
fileLogger.log(level: .error, message.description)
}
Код: Выделить всё
debugНо я наткнулся на ограничение, которое кажется намеренным. («Не удалось конфигурация: \ (res, privacy: .public)») , я получаю ошибку: « string interpolation не может быть использована в этом контексте; если вы вызовыте функцию OS_LOG , Попробуйте другую перегрузку. Вы не создаете экземпляры Oslogmessage напрямую. Вместо этого система
создает их для вас при написании сообщений в Unified
систему ведения журнала с использованием журнала. Форум: < /p>
API -интерфейсы журнала используют специальные функции компилятора для оценки уровня конфиденциальности
во время компиляции. Как говорится в диагностике, вы должны использовать статический
( И.e., известный во время компиляции) или свойство «Ослогприв»; Это
не может быть переменной, которая оценивается во время выполнения. Подразумевается
, что вы не можете создать свою собственную обертку для этих API без использования
Compiler-Internal. : Итак, вопрос: каковы варианты выполнения задачи постоянного ведения журнала, сохраняя при этом преимущества Apple «структурированная регистрация».
Подробнее здесь: https://stackoverflow.com/questions/793 ... le-systems
Мобильная версия