Как отключить отладочные сообщения os_log для определенных категорий или подсистем? - PullRequest
1 голос
/ 13 апреля 2020

В моем приложении iOS я использую API единой регистрации.

import os
private let log = OSLog(subsystem: "", category: "ThisComponent")
...
os_log(.debug, log:log, "Blah blah blah: %@", str)

Эти вызовы журнала отладки отображаются в консоли Xcode при запуске моего приложения. Как только я перестал фокусироваться на конкретном компоненте, я не хочу видеть поток сообщений журнала уровня отладки. Есть ли способ отключить их с помощью переменной среды или что-то в этом роде? Или мне нужно изменить код, либо закомментировав их, либо определив мои собственные Bool переменные и добавив if проверок:

if isDebugLogging {
    os_log(.debug, log:log, ...)
}

В документах упоминается возможность сделать это для macOS, но я специально спрашиваю о iOS.

Я не хочу выключать его all . Чтобы это было полезно, мне нужен способ отключить его по подсистеме или категории.

1 Ответ

1 голос
/ 13 апреля 2020

Вы применяете os_log, указывая некоторый глобальный объект OSLog. Просто замените этот объект на OSLog.disabled, и теперь сообщения, отправленные через него, нигде не будут go.

Пример:

let _activeLog = OSLog(subsystem: "hey", category: "ho")
let _inactiveLog = OSLog.disabled
var heyHoEnabled = true
var myLog : OSLog { heyHoEnabled ? _activeLog : _inactiveLog }

Теперь:

    os_log(.debug, log: myLog, "hey") // logged
    os_log(.debug, log: myLog, "ho") // logged
    self.heyHoEnabled = false
    os_log(.debug, log: myLog, "hey nonny no") // not logged

Но допустим, вы все еще хотите отправлять сообщения; Вы просто не можете видеть их. На уровне консоли нельзя сказать «не показывать мне 1014 * определенные сообщения». Вы можете фильтровать консоль, но только по тому, что вы хотите , а не по тому, что вы не хотите.

Кстати, тот факт, что os_log сообщения go в консоль Xcode - это дополнительная функция. Основное место, где они появляются, - это Консольное приложение. И сообщения консоли могут быть отфильтрованы так, чтобы включать только те подсистемы или категории, которые вы хотите. Это очень мощный фильтр, гораздо более мощный и точный, чем консоль Xcode.

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

...