Как перенаправить все ошибки, включая неперехваченные исключения, вызовы NSLog и другие журналы в файл журнала в Mac OS X?

Я пытаюсь найти структуру ведения журнала для приложения Какао, написанную на ObjC.

То, что я пытался до сих пор:

  1. Использовать NSLog, но затем понимаю, что это очень сложно настроить и перенаправить. Полагаю, я мог бы взломать его и написать макрос, который получает нужную мне информацию, такую ​​как идентификатор потока, текущая функция, текущая строка, текущий файл, текущее время, сообщение и т. Д., А затем использует NSLog, однако ...
  2. NSLog в конечном итоге использует NSLogv, который в конечном итоге использует asl, поэтому я подумал, что это "фантастика", я попытался использовать вместо него asl, с клиентом и контекстом по умолчанию (если бы я делал это правильно, мне пришлось бы создавать нового клиента для каждого потока), однако, если я не создам макрос, это тоже очень многословно, и я заметил, что отправленные журналы через asl получил широковещательную передачу по всей системе, тогда как NSLog регистрировался только в stderr, и я хочу, чтобы они оба попадали в один и тот же журнал!
  3. Затем я заметил, что ошибки отформатированы по-другому (другая дата и т. д.), поэтому там теперь третий контекст ведения журнала.

Какую настройку среды ведения журнала я могу использовать, чтобы ВСЕ сообщения регистрировались через эту структуру удобным способом, чтобы при возникновении проблемы с приложением разработчик мог получить файлы журнала и выяснить, что пошло не так?

Я не хочу просто перенаправлять stderr, я хочу иметь структурированный вывод журнала, содержащий все журналы. Я не Я не хочу, чтобы некоторые журналы выводились на стандартный вывод, я не хочу, чтобы какие-либо журналы отправлялись в syslogd, я просто хочу, чтобы все журналы записывались в один файл, который надежно идентифицирует всю соответствующую информацию об этом сообщении журнала (например, идентификатор потока, сообщение, функция, вызывающая регистратор и т. д.), в формате, который легко просматривать и визуализировать.

Я хочу перенаправить все текущие журналы в новое место назначения.

Есть ли у кого-нибудь предложения?

] РЕДАКТИРОВАТЬ:

Фактически, то, что я хочу сделать, в терминах ObjC:

  1. Сделать "переключение метода" на функцию NSLog. Это возможно? Можно ли (повторно) настроить использование Apple System Logger для переопределения любой предыдущей конфигурации службы в том же приложении?
  2. Определить все места, где я должен перехватывать необработанные исключения. Это включает, но, возможно, не • Ограничено: Необработанные исключения какао. Необработанные исключения ObjC. Необработанные исключения C ++. Сигналы Unix.
  3. Перехватывает и регистрирует в стеке ошибки, например, вызванные CoreGraphics. (Те, которые просто регистрируют сообщение «Добавьте точку останова с помощью отладчика !!!»).
15
задан Arafangion 6 December 2010 в 00:15
поделиться