Скрыть странные нежелательные журналы Xcode


697

При использовании 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

Может быть, кто-то уже нашел конфигурацию для этого?


1
Кажется, просто отладочная информация журналов осталась от разработки. Расследование ...
JAL

Вы отключили использование API динамического компоновщика в XCode?
Теджа Нандамури

Кажется, не работает для меня в Xcode 8, это решение работает только для бета-версии Xcode 8.
Бадал Шах

У меня была эта проблема с Xcode 8.2.1 на El Capitan. Обновление до macOS Sierra устранило проблему.
hwaxxer

Я все еще вижу проблему в Xcode 9.3, я отправил Apple Bug # 34767176 (Xcode 9 отображает отчеты об отладочной печати System Framework), которая является копией открытой ошибки # 32256894 Пожалуйста, отправьте дубликат ошибки в Apple: bugreport.apple.com/web
Пол Солт

Ответы:


1509

Попробуй это:

1- Из открытого меню Xcode: Продукт> Схема> Редактировать схему

2- В вашей переменной среды установлено OS_ACTIVITY_MODE=disable

Скриншот


25
Это также работает над выпуском Xcode 8.0, поэтому я полагаю, что это решение.
Надеин

27
Для всех, кто интересуется, как добраться до этого экрана, вам нужно перейти в Product> Scheme> Edit Scheme или Cmd + <
chrishale

46
@iDevzilla, есть некоторые проблемы с этим решением, оно удаляет некоторые важные вещи из журнала при использовании реального устройства, такие как данные с собственной регистрацией. Пожалуйста, просмотрите его еще раз, я не уверен, что это самое идеальное решение.
Итай Спектор

104
К сожалению, эта опция NSLogдля меня скрывает все s от реального устройства ...
Дмитрий Исаев

8
Проблема только в симуляторе. Лично я не верю, что было бы хорошей идеей добавить переменную среды, потому что она также скрывает важные журналы, такие как проблемы с ограничениями макета и, среди прочего, пример, который дал @ AirXygène. В симуляторе вы также можете нажать «CMD + /», чтобы открыть консоль, она выдаст вам старомодные логи. Надеюсь, что Apple исправит эту проблему в Xcode, хотя есть большой интерес к этому, глядя на количество голосов;)
Bocaxica

360

Основываясь на оригинальном твите от @rustyshelf и иллюстрированном ответе от iDevzilla, вот решение, которое заглушает шум симулятора, не отключая вывод NSLog с устройства.

  1. Под Product> Scheme> Edit Scheme ...> Run (Debug), установите переменную среды OS_ACTIVITY_MODE равной $ {DEBUG_ACTIVITY_MODE}, чтобы она выглядела так:

введите описание изображения здесь

  1. Перейдите к настройкам сборки проекта и нажмите «+», чтобы добавить пользовательский параметр с именем DEBUG_ACTIVITY_MODE. Разверните этот параметр и нажмите «+» рядом с «Отладка», чтобы добавить значение для конкретной платформы. Выберите раскрывающийся список и измените его на «Любой симулятор iOS». Затем установите значение «отключить», чтобы оно выглядело так:

введите описание изображения здесь


6
@NSNoob убедитесь, что у вас нет пробела в переменной env.
Сбаров

7
Слишком плохо, что это не принятый ответ, и слишком плохо, что этот ответ теряет счет подсчета голосов. Гораздо лучше ответить на IMHO, так как он отключил только OS_ACTIVITY_MODE для сборки DEBUG на симуляторе.
Swany

18
Это не сработало для меня, как и ответ с наибольшим количеством голосов. Использование Xcode 8.2.1 на OS X 10.11.6 El Capitan. Но что сработало, так это сочетание этого ответа с ответом BaseZen, использующим OS_ACTIVITY_DT_MODE вместо OS_ACTIVITY_MODE. (И неожиданно для меня по крайней мере и «НЕТ», и «отключить» отключили безудержное ведение журнала.)
RenniePet

1
@RenniePet, это именно то, что сделал для меня. Спасибо!
Миша,

8
Это решение скрывает все NSLog, начиная с Xcode 9. Чтобы сохранить NSLog, замените disableна default.
Cœur

88

OS_ACTIVITY_MODE не работал для меня (это может быть , потому что я typo'd , 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». Недостаточно источника.

https://github.com/macosforge/libdispatch/blob/8e63547ea4e5abbfe55c0c3064181c4950a791d3/src/voucher.c

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;
    }
}

11
Всегда приятно видеть ответ, который содержит причины и обоснование, а не просто быстрое решение.
ОАО

Отработал этот ответ, используя OS_ACTIVITY_DT_MODE = NO
Алмас Адильбек,

1
Создает ли это поведение, отличное от OS_ACTIVITY_MODE = отключить? Есть ли основания предпочитать это решение?
n8gray

1
Это не. Это скрывает все это.
durazno

2
@Frizlab Да, я упоминаю оба в своем посте. Смотрите "ИЛИ" ... Я os_logнеофициально называю новую помощь Коул.
BaseZen

64

Твит был ответ для меня - https://twitter.com/rustyshelf/status/775505191160328194

Чтобы запретить симулятору Xcode 8 iOS вести себя как сумасшедший, установите переменную среды OS_ACTIVITY_MODE = disable в вашей схеме отладки.

Это сработало.


6
Как уже было сказано: OS_ACTIVITY_MODE = disable отключает все другие журналы с NSLog.
Дзенсик

5
Это решение скрывает все NSLog, начиная с Xcode 9. Чтобы сохранить NSLog, замените disableна default.
Cœur

34

Пожалуйста, найдите ниже шаги.

  1. Выберите Product => Scheme => Edit Scheme или используйте ярлык: CMD + <
  2. Выберите Runопцию слева.
  3. В разделе Переменные среды добавьте переменную OS_ACTIVITY_MODE = отключить

Для получения дополнительной информации, пожалуйста, найдите ниже представление GIF.

Редактировать схему


3
Подожди .... На втором запуске это сработало. Слава для Gif Видео. Лучшие ответы всегда на дне!
эонист

2
Это решение скрывает все NSLog, начиная с Xcode 9. Чтобы сохранить NSLog, замените disableна default.
Cœur

33

Это все еще не исправлено в Версии 8.0 XCode 8.0 для меня (8S162m), и дополнительные журналы также появляются в консоли XCode

** РЕДАКТИРОВАНИЕ 8/1/16: это было признано в примечаниях к выпуску для Xcode 8 Beta 4 (8S188o) как проблема, все еще сохраняющаяся .

Известные проблемы в Xcode 8 beta 4 - IDE

Отладка

Консоль отладки XCode показывает дополнительную регистрацию от системных платформ при отладке приложений в Симуляторе. (27331147, 26652255)

Предположительно, это будет решено выпуском GM. До тех пор терпение и хотя не идеальный, но обходной путь, который я использую, ниже ...

Как и в предыдущем ответе, я должен:

  • префикс моих журналов печати с каким-то специальным символом (например, * или ^ или! и т. д.)

  • Затем используйте окно поиска в правом нижнем углу панели консоли, чтобы отфильтровать журналы консоли, введя выбранный мной специальный символ, чтобы консоль отображала журналы печати в соответствии с назначением.

приставка


1
@SimplyLearning вы найдете эту информацию по всему твиттеру. Но вы можете проверить этот официальный веб-сайт Apple: developer.apple.com/news или их ленту новостей, чтобы получать обновления, когда они их публикуют: developer.apple.com/news/rss/news.rss Кстати: это все еще кажется быть проблемой в Xcode Beta 3.
benrudhart

50
Только что получил Xcode 8 GM, и проблема все еще сохраняется. Очень назойливый!!
AdamM

8
Только что загрузили версию Xcode 8.0 (8A218a) из App Store. Проблема все еще там.
Statik

4
Просто смешно. Все еще там в Final MAS версии.
Шай Мишали

1
Мы используем тег-префикс для фильтрации. Некоторые проблемы: Несколько строк будут показывать только первую. При использовании lldb для отладки вам необходимо включить фильтрацию. Действительно очень грустно, что на сегодняшний день консоль чрезвычайно ограничена. У нас есть приложение для достойной фильтрации, но нам нужно скопировать / вставить с консоли. Как грустно.
bauerMusic

23

Мое решение заключается в использовании команды отладчика и / или сообщения журнала в точках останова.

введите описание изображения здесь

И измените вывод консоли с All Output на Вывод отладчика как

введите описание изображения здесь


14

Хорошо. Похоже, что в этой игре много шума, поэтому я дам вам способ сохранить его, не используя этот трюк со схемой. Я расскажу об 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"ключ / значение ... или просто удалите plist. Обратите внимание, что для выполнения любого из этих действий вам нужно быть пользователем 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" }}}

Удачи :]


Я заархивировал, затем удалил в случае необходимости восстановления.
dandan78 21.09.16

1
Я обнаружил, что это не может заставить замолчать большую часть сетевого кода, возможно, из-за отсутствия имени подсистемы:2016-09-23 15:09:21.354686 ProductName[8823:191206][] tcp_connection_start 3 starting
BaseZen

@BaseZen К сожалению, я только затронул вопрос OPs, который не содержал проблем с протоколированием tcp. Вы можете создать новый пост SO, если вам нужна помощь в решении этой проблемы.
Комета Созина

13

Это связано с известной проблемой с регистрацией, найденной в Примечаниях к выпуску бета-версии Xcode 8 (также спросил инженер в WWDC).

При отладке приложений WatchOS в симуляторе Watch операционная система может создавать чрезмерное количество бесполезных журналов. (26652255)

В настоящее время нет доступного обходного пути, вы должны дождаться новой версии Xcode.

РЕДАКТИРОВАТЬ 7/5/16: Это предположительно исправлено с XCode 8 Beta 2:

Решено в Xcode 8 beta 2 - IDE

Отладка

  • При отладке приложения в симуляторе, журналы видны. (26457535)

Примечания к выпуску Xcode 8 Beta 2


Я тоже так думал, но я не использую ни приложение watchOS, ни симулятор watchOS. Но это может случиться и с другими симами. Отложите сейчас и посмотрите, исправит ли определенная бета-версия Xcode 8 следующие недели / месяцы.
Ганс Кнохель

@HansKnoechel я тоже, но я могу подтвердить, что эта проблема возникает с любым приложением. Никаких «официальных» слов от Apple, кроме заметок о выпуске и некоторого обсуждения на WWDC.
JAL

спасибо, то же самое здесь! Мы должны поговорить об этом завтра во время WWDC, хе-хе :-)
Ханс Кнохель

Также бывает для моего iPhone 5s Simulator, наверное, всех симуляторов.
SimplGy

Я не смог получить доступ к ссылке в этом ответе, несмотря на то, что вошел
SimplGy

7

Это больше не проблема в xcode 8.1 (протестированная бета-версия 8.1 (8T46g)) . Вы можете удалить OS_ACTIVITY_MODEпеременную окружения из вашей схемы.

https://developer.apple.com/go/?id=xcode-8.1-beta-rn

Отладка

• Консоль отладки XCode больше не показывает дополнительную регистрацию из системных платформ при отладке приложений в симуляторе. (26652255, 27331147)


20
Я все еще получаю много ложных входов в 8.1. В основном странные сокеты и TCP-соединения. Кто-нибудь еще или только я?
Джордан Смит

3
Я только что скачал Xcode 8.1 сегодня (31/10/2016) и все еще вижу некоторые журналы отладки, подобные этой, [MC] Reading from private effective user settings.из пустого нового фиктивного проекта File> New> Project.
Чжан

4

В Xcode 10OS_ACTIVITY_MODE переменная с disable(или defaultзначение) также не выключает NSLogни на что.

Поэтому, если вы хотите избавиться от шума консоли, но не от собственных журналов, вы можете попробовать старый добрый printf("")вместо NSLog, так как на него не влияет OS_ACTIVITY_MODE= disable.

Но лучше ознакомьтесь с новым os_logAPI здесь .


1

Это решение работает для меня:

  1. Запустите приложение в симуляторе
  2. Откройте системный журнал ( + /)

Это выведет все данные отладки, а также ваши NSLogs.

Чтобы отфильтровать только ваши утверждения NSLog:

  1. Префикс каждого с символом, например: NSLog(@"^ Test Log")
  2. Отфильтруйте результаты, используя окно поиска в правом верхнем углу, «^» в случае выше

Вот что вы должны получить:

Снимок экрана консоли

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.