Гибридный регистратор, который регистрируется с помощью OSLog и в файл в системах Apple.IOS

Программируем под IOS
Ответить
Anonymous
 Гибридный регистратор, который регистрируется с помощью OSLog и в файл в системах Apple.

Сообщение Anonymous »

Apple рекомендует использовать OSLog `Logger. Он продвигается на WWDC как минимум с 2020 года (например, см. WWDC 2023 Session 10226 Debug со структурированным журналированием).
Предполагается, что он очень эффективен и так далее.
Самым большим ограничением является то, что:

В 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)
}
Существует лишь несколько методов, которые можно переопределить, например (, bull и аналогично).
Но я наткнулся на ограничение, которое кажется намеренным. («Не удалось конфигурация: \ (res, privacy: .public)») , я получаю ошибку: « string interpolation не может быть использована в этом контексте; если вы вызовыте функцию OS_LOG , Попробуйте другую перегрузку. Вы не создаете экземпляры Oslogmessage напрямую. Вместо этого система
создает их для вас при написании сообщений в Unified
систему ведения журнала с использованием журнала. Форум: < /p>

API -интерфейсы журнала используют специальные функции компилятора для оценки уровня конфиденциальности
во время компиляции. Как говорится в диагностике, вы должны использовать статический
( И.e., известный во время компиляции) или свойство «Ослогприв»; Это
не может быть переменной, которая оценивается во время выполнения. Подразумевается
, что вы не можете создать свою собственную обертку для этих API без использования
Compiler-Internal. : Итак, вопрос: каковы варианты выполнения задачи постоянного ведения журнала, сохраняя при этом преимущества Apple «структурированная регистрация».


Подробнее здесь: https://stackoverflow.com/questions/793 ... le-systems
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»