Скрыть странные нежелательные журналы Xcode
При использовании Xcode 8+ и создании нового пустого проекта при запуске приложения появляются следующие журналы:
2016-06-13 16:33:34.406093 TestiOS10[8209:100611] bundleid: com.appc.TestiOS10, enable_level: 0, persist_level: 0, propagate_with_activity: 0
2016-06-13 16:33:34.406323 TestiOS10[8209:100607] Created DB, header sequence number = 248
2016-06-13 16:33:34.409564 TestiOS10[8209:100611] subsystem: com.apple.UIKit, category: HIDEvents, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 0, privacy_setting: 0
2016-06-13 16:33:34.504117 TestiOS10[8209:100607] Created DB, header sequence number = 248
2016-06-13 16:33:34.548023 TestiOS10[8209:100607] subsystem: com.apple.BaseBoard, category: MachPort, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 0, privacy_setting: 0
2016-06-13 16:33:34.568458 TestiOS10[8209:100608] subsystem: com.apple.FrontBoard, category: Common, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 0, privacy_setting: 0
Может быть, кто-то уже нашел конфигурацию для этого?
14 ответов
Попробуй это:
1- Из открытого меню XCode: Продукт> Схема> Редактировать схему
2- На вашей переменной среды установлено OS_ACTIVITY_MODE
знак равно disable
Основываясь на оригинальном твите от @rustyshelf и иллюстрированном ответе от iDevzilla, вот решение, которое заглушает шум от симулятора без отключения вывода NSLog с устройства.
- Под Product > Scheme > Edit Scheme... > Run (Debug), установите переменную среды OS_ACTIVITY_MODE равной ${DEBUG_ACTIVITY_MODE}, чтобы она выглядела так:
- Перейдите в настройки сборки своего проекта и нажмите +, чтобы добавить пользовательский параметр с именем DEBUG_ACTIVITY_MODE. Разверните этот параметр и нажмите "+" рядом с "Отладка", чтобы добавить значение для конкретной платформы. Выберите раскрывающийся список и измените его на "Любой симулятор iOS". Затем установите значение "отключить", чтобы оно выглядело так:
OS_ACTIVITY_MODE не работает для меня (возможно, потому что я опечатал disable
как disabled
, но разве это не более естественно?!?) или, по крайней мере, не мешало большому количеству сообщений. Итак, вот реальная сделка с переменными среды.
https://llvm.org/svn/llvm-project/lldb/trunk/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp
lldb_private::Error
PlatformDarwin::LaunchProcess(lldb_private::ProcessLaunchInfo &launch_info) {
// Starting in Fall 2016 OSes, NSLog messages only get mirrored to stderr
// if the OS_ACTIVITY_DT_MODE environment variable is set. (It doesn't
// require any specific value; rather, it just needs to exist).
// We will set it here as long as the IDE_DISABLED_OS_ACTIVITY_DT_MODE flag
// is not set. Xcode makes use of IDE_DISABLED_OS_ACTIVITY_DT_MODE to tell
// LLDB *not* to muck with the OS_ACTIVITY_DT_MODE flag when they
// specifically want it unset.
const char *disable_env_var = "IDE_DISABLED_OS_ACTIVITY_DT_MODE";
auto &env_vars = launch_info.GetEnvironmentEntries();
if (!env_vars.ContainsEnvironmentVariable(disable_env_var)) {
// We want to make sure that OS_ACTIVITY_DT_MODE is set so that
// we get os_log and NSLog messages mirrored to the target process
// stderr.
if (!env_vars.ContainsEnvironmentVariable("OS_ACTIVITY_DT_MODE"))
env_vars.AppendArgument(llvm::StringRef("OS_ACTIVITY_DT_MODE=enable"));
}
// Let our parent class do the real launching.
return PlatformPOSIX::LaunchProcess(launch_info);
}
Итак, постановка OS_ACTIVITY_DT_MODE
"НЕТ" в переменных среды (метод GUI, объясненный на скриншоте Схемы в основном ответе) заставляет меня работать.
Так далеко как NSLog
будучи свалкой для системных сообщений, ошибок и вашей собственной отладки: в любом случае, вероятно, нужен реальный подход к ведению журнала, например, https://github.com/fpillet/NSLogger.
ИЛИ ЖЕ
Пейте новый Kool-Aid: http://asciiwwdc.com/2016/sessions/721 https://developer.apple.com/videos/play/wwdc2016/721/ Неудивительно, что после капитального ремонта всей машины возникают некоторые проблемы логирование API.
ДОПОЛНЕНИЕ
Тем не мение, NSLog
это просто прокладка
https://developer.apple.com/library/content/releasenotes/Miscellaneous/RN-Foundation-OSX10.12/
NSLog / CFLog
NSLog - теперь просто шайба к os_log в большинстве случаев.
Имеет смысл только указать источник другой переменной env. Довольно разрозненное место, на этот раз от Apple. Не уверен, почему они перекрываются. [Неверный комментарий о NSLog
удалены]
[Отредактировано 22 сентября]: Интересно, что "release" и "stream" делают иначе, чем "debug". Недостаточно источника.
e = getenv("OS_ACTIVITY_MODE");
if (e) {
if (strcmp(e, "release") == 0) {
mode = voucher_activity_mode_release;
} else if (strcmp(e, "debug") == 0) {
mode = voucher_activity_mode_debug;
} else if (strcmp(e, "stream") == 0) {
mode = voucher_activity_mode_stream;
} else if (strcmp(e, "disable") == 0) {
mode = voucher_activity_mode_disable;
}
}
Твит был ответ для меня - https://twitter.com/rustyshelf/status/775505191160328194
Чтобы запретить симулятору iOS Xcode 8 вести себя как сумасшедший, установите переменную среды OS_ACTIVITY_MODE = disable в вашей схеме отладки.
Это сработало.
Пожалуйста, найдите ниже шаги.
- Выберите Product => Scheme => Edit Scheme или используйте ярлык:
CMD + <
- Выберите
Run
вариант с левой стороны. - В разделе Переменные среды добавьте переменную OS_ACTIVITY_MODE = отключить
Для получения дополнительной информации, пожалуйста, найдите ниже представление GIF.
Это все еще не исправлено в Версии 8.0 XCode 8.0 для меня (8S162m), и дополнительные журналы также появляются в консоли XCode
** РЕДАКТИРОВАНИЕ 8/1/16: Это было признано в примечаниях к выпуску для Xcode 8 Beta 4 (8S188o) как проблема, все еще сохраняющаяся.
Известные проблемы в Xcode 8 beta 4 - IDE
отладка
Консоль отладки XCode показывает дополнительную регистрацию от системных платформ при отладке приложений в Симуляторе. (27331147, 26652255)
Предположительно, это будет решено выпуском GM. До тех пор терпение и хотя не идеал, но обходной путь, который я использую, ниже...
Как и в предыдущем ответе, я должен:
префикс моих журналов печати с каким-то специальным символом (например, * или ^ или! и т. д.)
Затем используйте окно поиска в правом нижнем углу панели консоли, чтобы отфильтровать журналы консоли, введя выбранный мной специальный символ, чтобы консоль отображала журналы печати в соответствии с назначением.
Мое решение заключается в использовании команды отладчика и / или сообщения журнала в точках останова.
И измените вывод консоли с All Output на Вывод отладчика как
Хорошо. Похоже, что в этой игре много шума, поэтому я дам вам способ сохранить его, не используя этот трюк со схемой. Я расскажу об iOS Simulator специально, но это также может потребоваться для TV Sim, который находится в другом каталоге.
Проблема, которая вызывает все это - списки, расположенные в каталоге Xcode. При запуске Sim запускается процесс, называемый configd_sim, который считывает списки и выводит отладочную информацию, если в списках указывается, что они должны быть зарегистрированы.
Списки расположены здесь:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/Preferences/Logging/Subsystems
Если вы играете с бета-версией, обратите внимание, что каталог будет другим.
Вы увидите многочисленные списки в этом каталоге. Теперь создайте и запустите ваше приложение и наблюдайте за журналами. Вы ищете контент, за которым сразу следует подсистема: часть. Это имя, которое следует сразу за этим, представляет соответствующий проблемный список.
Оттуда либо измените plist, чтобы выбить отладочный ключ / значение [Level], которое является словарем, содержащим "Enable" => "Default"
ключ / значение... или просто удалите список. Обратите внимание, что для выполнения любого из этих действий вам нужно быть пользователем root, поскольку они находятся в приложении Xcode.
plutil -p
команда может быть полезна и для вас. т.е.
plutil -p /Applications/Xcode.app/Contents/Developer/Platforms/AppleTVSimulator.platform/Developer/SDKs/AppleTVSimulator.sdk/System/Library/Preferences/Logging/Subsystems/com.apple.BackBoardServices.fence.plist
Это дало мне один из проблемных списков, которые содержали:
{ "DEFAULT-OPTIONS" => { "Level" => { "Enable" => "Default" }}}
Удачи:]
Это связано с известной проблемой с регистрацией, найденной в Примечаниях к выпуску бета-версии Xcode 8 (также спросил инженер в WWDC).
При отладке приложений WatchOS в симуляторе Watch операционная система может создавать чрезмерное количество бесполезных журналов. (26652255)
В настоящее время нет доступного обходного пути, вы должны дождаться новой версии Xcode.
РЕДАКТИРОВАТЬ 7/5/16: Это предположительно исправлено с Xcode 8 Beta 2:
Решено в Xcode 8 beta 2 - IDE
отладка
- При отладке приложения в симуляторе, журналы видны. (26457535)
Это больше не проблема в xcode 8.1 (протестированная бета-версия 8.1 (8T46g)). Вы можете удалить OS_ACTIVITY_MODE
переменная окружения из вашей схемы.
https://developer.apple.com/go/?id=xcode-8.1-beta-rn
отладка
• Консоль отладки XCode больше не показывает дополнительную регистрацию из системных платформ при отладке приложений в симуляторе. (26652255, 27331147)
В Xcode 10 OS_ACTIVITY_MODE
переменная с disable
(или же default
) значение также отключает NSLog
не важно что.
Так что если вы хотите избавиться от шума консоли, но не от собственных журналов, вы можете попробовать старый добрый printf("")
вместо NSLog, так как на него не влияют OS_ACTIVITY_MODE
знак равно disable
,
Но лучше зацените новый os_log
API здесь.
Обратите внимание, что для симулятора iOS 14 OS_ACTIVITY_MODE=disable не будет отображать какие-либо журналы с использованием нового Swift Logger. Вам придется удалить или включить его.
Я прочитал все решения, пока ничего не работает, я использую XCODE 12.5 на момент написания этого ответа, это самая неприятная вещь, которую можно увидеть в отладчике с такой кучей / потоком нежелательных сообщений.
Решение, которое я сделал, было намного проще, чем самые сложные из существующих, вот что я сделал, чтобы решить эту досадную проблему:
Нет необходимости использовать какие-либо переменные среды и т. Д., Иначе использование их, как было предложено в предыдущих сообщениях, отключило бы вывод NSLOG, что вам не нужно в таком случае.
Я убедился, что весь мой NSLOG будет содержать строку, которую я буду отслеживать позже, например:
Раньше я делал:
NSLog(@"Hello World");
Теперь я делаю:
NSLog(@"[Admin]: Hello World");
В то время как «[Admin]» - это имя моей программы (или любая другая строка, которая вам нравится, кроме [Admin] »
(Необязательный шаг) или (Проще), я написал функцию для направления (ну, прокси) NSLog в другую глобальную функцию «Журнал», тогда как все мои журналы перейдут к этой функции, а затем функция Журнал добавит «[Admin]"к исходной строке регистрации, а также добавить время регистрации и другие необходимые мне элементы и т. д. (аналогично WebLogic или любой другой регистрации JAVA), это гарантирует, что все журналы будут соответствовать одному стандарту.
... Вот ядерное оружие за миллион долларов:
Теперь войдите в окно отладчика, внизу вы увидите окно «поиска», в котором написано «Фильтр», введите строку (пример; «[Admin]»), нажмите ENTER, и работа будет выполнена.
Таким образом, вы будете видеть только те строки, которые вам нравятся,
Также полезно, когда вы хотите отфильтровать другие компоненты, например, для сетевого взаимодействия я использую больше строк, которые я могу фильтровать позже.
Другими словами, раздражающие строки журналов, которые не имеют ничего общего с вашим приложением, всегда будут там, но вы решите не видеть их, используя указанную выше команду, которая, я надеюсь, решит проблему.
Надеюсь, хорошего дня всем.
ЧАС
Это решение работает для меня:
- Запустите приложение в симуляторе
- Откройте системный журнал (
⌘
+/
)
Это выведет все данные отладки, а также ваши NSLogs.
Чтобы отфильтровать только ваши утверждения NSLog:
- Префикс каждого с символом, например:
NSLog(@"^ Test Log")
- Отфильтруйте результаты, используя окно поиска в правом верхнем углу, "^" в случае выше
Вот что вы должны получить: