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