Я пытаюсь найти структуру ведения журнала для приложения Cocoa, написанного в ObjC.
Что я пытался сделать до сих пор:
- Используйте NSLog, но затем понимайте, что его очень сложно настроить и перенаправить. Я полагаю, я мог взломать его и написать макрос, который получает информацию, которую я хочу, например, идентификатор потока, текущую функцию, текущую строку, текущий файл, текущее время, сообщение и т.д., А затем использует NSLog, однако...
- NSLog в конечном счете использует NSLogv, который в конечном счете использует asl, поэтому я подумал "фантастически", я попробовал использовать asl вместо этого с клиентом и контекстом по умолчанию (если бы я делал это правильно, мне пришлось бы создать новый клиент для каждого потока), однако, если я не создаю макрос, это также очень многословно, и я заметил, что журналы, отправленные через asl, получили широковещательную широковещательную систему, тогда как NSLog только регистрировался в stderr, и я хочу, чтобы они оба переходили к одному и тому же войти!
- Затем я заметил, что ошибки отформатированы по-другому (разные datestamp и т.д.), поэтому теперь есть третий контекст ведения журнала.
Какую настройку фреймворка lging можно использовать для того, чтобы ВСЕ сообщения регистрировались в этой структуре удобным образом, чтобы при возникновении проблемы с приложением разработчик мог получить файлы журнала и выяснить, что пошло не так?
Я не хочу просто перенаправлять stderr, я хочу иметь структурированный вывод журнала, содержащий все журналы. Я не хочу, чтобы некоторые журналы поступали на стандартный вывод, я не хочу, чтобы какие-либо журналы отправлялись в syslogd, я просто хочу, чтобы все журналы записывались в один файл, что надежно идентифицирует всю соответствующую информацию об этом сообщении журнала (например, идентификатор потока, сообщение, функция, называемая регистратором, и т.д.), в формате, который легко просматривать и визуализировать.
Я хочу перенаправить все текущие журналы в новый пункт назначения.
Есть ли у кого-нибудь предложения?
EDIT:
Фактически, то, что я хочу сделать, в терминах ObjC:
- Сделайте "метод swizzling" в функции NSLog. Это возможно? Возможно ли (повторно) настроить использование системного регистратора Apple для переопределения любой предыдущей конфигурации службы в одном приложении?
- Определите все места, где я должен поймать необработанные исключения. Это включает, но, возможно, не ограничивается: Необработанными Cocoa Исключениями. Необработанные исключения ObjC. Необработанные исключения С++. Сигналы Unix.
- Поймать и зарегистрировать стек для ошибок, например, поднятых CoreGraphics. (Те, которые просто регистрируют сообщение "Добавить точку останова с помощью вашего отладчика!!!" ).