Унифицированная регистрация в Apple - как получить имя файла и номер строки - PullRequest
0 голосов
/ 17 сентября 2018

Документация Apple Unified Logging гласит:

Не включайте символическую информацию или номера строк исходного файла в сообщения.Система автоматически захватывает эту информацию.

Но в консоли я не вижу ни имени файла, ни имени класса, ни имени функции, ни номера строки.

Как их можно найти в моемжурналы?

Ответы [ 2 ]

0 голосов
/ 04 июля 2019

Действительно, даже MacOS Catalina beta (сборка 19A501i) не показывает исходные строки в Console.app .

Однако инструмент командной строки log показывает исходную информацию для смоделированногоустройств (начиная с macOS 10.14).

Следующая команда покажет информацию журнала для всех симулируемых устройств, которые в данный момент загружены (работают) в симуляторе.Если в настоящий момент не выполняется ни одно моделируемое устройство, команда завершится ошибкой.

xcrun simctl spawn booted log stream --level debug --color always --source

Вы можете отфильтровать все, что не из вашей программы, используя подсистему в вызовах os_log, иприменение предиката к потоковым зарегистрированным данным.Например, если ваша подсистема com.subsystem.my, вы можете использовать

xcrun simctl spawn booted log stream --level debug --color always --predicate '(subsystem BEGINSWITH "com.subsystem.my")' --source

Информация об исходном коде будет показана после столбца TTL.

Вы также можетефильтровать по процессу (то есть по названию цели), если вы не настроили подсистему

xcrun simctl spawn booted log stream --level debug --color always --predicate '(process == "MyProcess")' --source

Однако обычно это приводит к слишком большому количеству сообщений журнала, так как информациятакже будут включены протоколы других каркасов.

Кроме того, вместо booted можно использовать имя фактического смоделированного устройства (для потоковой передачи данных журнала только с этого устройства).

0 голосов
/ 18 сентября 2018

os_log в настоящее время не дает номеров строк / имен функций для кода Swift в Console.app или с помощью команды log stream.

Если вам это действительно нужно - вы можете использовать Литеральные выражения для передачи информации вручную через NSLog или os_log, например:

os_log(.info, "Log message from file: %s, line: %i, column: %i", #file, #line, #column)

Может быть соблазнительно обернуть os_log, чтобы всегда включать эту информацию, но Apple предлагает не делать этого из соображений производительности.

...