奇妙な不要なXcodeログを隠す


695

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

xcodeで動的リンカーAPIの使用をオフにしましたか?
Teja Nandamuri

Xcode 8で私のために機能していないようですが、このソリューションはXcode 8ベータでのみ機能します。
Badal Shah

El CapitanのXcode 8.2.1でこの問題が発生しました。macOS Sierraにアップグレードすると問題が修正されました。
hwaxxer 2017年

Xcode 9.3でもまだ問題が発生します。Appleバグ#34767176(Xcode 9はシステムフレームワークのデバッグ印刷ステートメントを表示します)を提出しました。これは未解決のバグ#32256894の複製です。Appleにバグの複製を提出してください。bugreport.apple.com/web
Paul Solt

回答:


1507

これを試して:

1- Xcodeメニューから開く:Product> Scheme> Edit Scheme

2-環境変数セットOS_ACTIVITY_MODE=disable

スクリーンショット


25
Xcode 8.0リリースでも動作するため、これが解決策であることをお勧めします。
ナデイン2016

27
その画面にアクセスする方法を知りたい場合は、[製品]> [スキーム]> [スキームの編集]またはCmd + <
chrishale

46
@iDevzilla、このソリューションにはいくつかの問題があり、実際にデバイスを使用すると、自己ログデータなどの重要な要素がログから削除されます。もう一度概説してください。これが最も理想的なソリューションであるかどうかはわかりません。
Itai Spector

104
残念ながら、このオプションはすべてNSLogのを実際のデバイスから隠してくれます...
Dmitry Isaev

8
問題はシミュレータでのみ抵抗します。個人的には、環境変数を追加することは良い考えではないと思います。これは、レイアウト制約の問題や、特に@AirXygèneの例のような重要なログも非表示にするためです。シミュレータでは、「CMD + /」を押してコンソールを開くこともできます。これにより、昔ながらのログが表示されます。うまくいけば、AppleがXcodeでこの問題を修正することを望みます。賛成票の数を見るこのことに多くの関心があります;)
Bocaxica

360

@rustyshelfからの元のツイートと、iDevzillaからのイラスト付きの回答に基づいて、デバイスからのNSLog出力を無効にすることなく、シミュレータからのノイズを抑制します。

  1. [製品]> [スキーム]> [スキームの編集...]> [実行(デバッグ)]で、OS_ACTIVITY_MODE環境変数を$ {DEBUG_ACTIVITY_MODE}に設定して、次のようにします。

ここに画像の説明を入力してください

  1. プロジェクトのビルド設定に移動し、+をクリックしてDEBUG_ACTIVITY_MODEという名前のユーザー定義設定を追加します。この設定を展開し、[デバッグ]の横の[+]をクリックして、プラットフォーム固有の値を追加します。ドロップダウンを選択し、「Any iOS Simulator」に変更します。次に、値を「無効」に設定して、次のようにします。

ここに画像の説明を入力してください


6
@NSNoobは、env変数にスペースがないことを確認してください。
sbarow 2016年

7
残念ながら、これは受け入れられた回答ではありません。あまりに悪いと、この回答は賛成票を失います。シミュレーターでデバッグビルドのOS_ACTIVITY_MODEのみを無効にしたので、IMHOの方がはるかに適切です。
Swany、2016年

18
これは私にはうまくいきませんでしたし、トップ投票の回答もうまくいきませんでした。OS X 10.11.6 El CapitanでXcode 8.2.1を使用します。しかし、機能したのは、この回答とBaseZenの回答を組み合わせたもので、OS_ACTIVITY_MODEではなくOS_ACTIVITY_DT_MODEを使用したものです。(そして私にとって予期せぬことに、少なくとも「NO」と「disable」の両方が蔓延しているロギングをオフにしました。)
RenniePet 2017年

1
@RenniePet、それがまさに私のためにやったことです。ありがとう!
ミシャ

8
このソリューションは、置き換える、のNSLogを保つためにXcodeの9で始まるすべてのNSLogを非表示になりますdisabledefault
・クール

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メソッド)で「NO」に設定すると、私にとってはうまくいきます。

NSLogシステムメッセージ、エラー、および独自のデバッグの根拠となる限り、本当のロギングアプローチがおそらく呼び出されます(例:https : //github.com/fpillet/NSLogger)

または

新しいクールエイドを飲む: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の単なるシムになりました。

現在、他の環境変数のソースを引用するだけで意味があります。今回はAppleの内部とはまったく異なる場所です。それらが重複している理由がわかりません。[ NSLog削除済みに関するコメントが間違っています]

[9月22日編集]:「リリース」と「ストリーム」は「デバッグ」とはどのように異なるのでしょうか。ソースが足りません。

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
クイックフィックスだけでなく、理由と背景を提供する回答を見るのはいつもうれしいです。
jscs

OS_ACTIVITY_DT_MODE = NO
Almas Adilbek

1
これはOS_ACTIVITY_MODE = disableとは異なる動作を生成しますか?このソリューションを選択する理由はありますか?
n8gray 2016年

1
ありません。それはすべてを隠します。
durazno 2016年

2
@Frizlabはい、私の投稿で両方について言及しました。「OR」を参照してください... os_log非公式に新しいクールエイドと呼びます。
BaseZen 2016年

64

ツイートに答えがあった-https://twitter.com/rustyshelf/status/775505191160328194

Xcode 8 iOSシミュレーターが狂ったようにログを記録しないようにするには、デバッグスキームで環境変数OS_ACTIVITY_MODE = disableを設定します。

動いた。


6
すでに述べたように、OS_ACTIVITY_MODE = disableは、NSLogを使用した他のすべてのロギングを非アクティブにします。
dzensik 2016

5
このソリューションは、置き換える、のNSLogを保つためにXcodeの9で始まるすべてのNSLogを非表示になりますdisabledefault
・クール

34

以下の手順を見つけてください。

  1. 製品=>スキーム=>スキームの編集を選択するか、ショートカットを使用します。 CMD + <
  2. Run左側からオプションを選択します。
  3. 「環境変数」セクションで、変数OS_ACTIVITY_MODE = disableを追加します

詳細については、以下のGIF表現をご覧ください。

スキームを編集


3
待ってください... 2回目の実行でうまくいきました。Gifビデオの称賛。最良の答えは常に一番下にあります!
eonist 2017年

2
このソリューションは、置き換える、のNSLogを保つためにXcodeの9で始まるすべてのNSLogを非表示になりますdisabledefault
・クール

33

Xcodeバージョン8.0ベータ2(8S162m)ではこれはまだ修正されておらず、Xcodeコンソールに余分なログも表示されます

** EDIT 8/1/16:これは、Xcode 8 Beta 4(8S188o)リリースノートで、まだ解決されていない問題として認められています。

Xcode 8ベータ4の既知の問題– IDE

デバッグ中

•Xcode Debug Consoleは、シミュレータでアプリケーションをデバッグするときに、システムフレームワークからの追加のログを表示します。(27331147、26652255)

おそらくこれはGMリリースで解決されるでしょう。それまでは忍耐と理想的ではありませんが、私が使用している回避策は以下のとおりです...

以前の答えと同様に、私はしなければなりません:

  • 印刷ログの前に、ある種の特殊文字(*、^ 、!など)を付けます。

  • 次に、コンソールペインの右下にある検索ボックスを使用して、選択した特殊文字を入力してコンソールログをフィルター処理し、意図したとおりにコンソールに印刷ログを表示させます。

コンソール


1
@SimplyLearningこの情報は、Twitter全体で見つかります。しかし、あなたはアップルからこの公式ウェブサイトをチェックアウトするかもしれません:developer.apple.com/newsまたは彼らのニュースフィードがそれらを公開するときに更新を取得するために:developer.apple.com/news/rss/news.rssちなみに、これはまだようですXcode Beta 3の問題になる
benrudhart

50
Xcode 8 GMを入手しましたが、問題は解決しません。とてもうるさい!!
AdamM 2016

8
App StoreからXcodeバージョン8.0(8A218a)をダウンロードしたところです。問題はまだあります。
Statik 2016

4
とんでもない。まだ最終的なMASバージョンがあります。
Shai Mishali 2016

1
フィルタリングにはタグ接頭辞を使用します。一部の問題は次のとおりです。複数の行で最初の行のみが表示されます。デバッグにlldbを使用する場合は、フィルタリングを切り替える必要があります。今日のところ、コンソールが非常に限られていることは本当に本当に悲しいことです。適切なフィルタリングのためのアプリがありますが、コンソールからコピー/貼り付けする必要があります。なんて悲しい。
bauerMusic 2018

23

私の解決策は、ブレークポイントでデバッガーコマンドログメッセージを使用することです。

ここに画像の説明を入力してください

以下とから、コンソールの出力を変更するすべての出力デバッガ出力のような

ここに画像の説明を入力してください


14

よし。これについては多くの騒動があるようですので、私はy'allにそのスキームトリックを使わずにそれを持続させる方法を与えます。具体的にはiOSシミュレータについて説明しますが、別のディレクトリにあるTV Simにも適用する必要があるかもしれません。

このすべての原因となっている問題は、Xcodeディレクトリ内にあるplistです。Simの起動時にconfigd_simと呼ばれるプロセスが起動され、plistを読み取り、plistがログに記録する必要があると指定した場合にデバッグ情報を出力します。

plistは次の場所にあります。

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/Preferences/Logging/Subsystems

ベータ版で遊んでいる場合は、ディレクトリが異なることに注意してください。

このディレクトリに多数のplistが表示されます。次に、アプリケーションをビルドして実行し、ログを確認します。サブシステムの直後に続くコンテンツを探しています:パーツ。対応する問題のあるplistを表すのは、この直後の名前です。

ここに画像の説明を入力してください

そこから、plistを変更して、キー/値を含むディクショナリであるデバッグ[レベル]キー/値をノックアウトする"Enable" => "Default"か、単にplistを削除します。これらはXcodeアプリケーションにあるため、これらのいずれかを実行するにはrootになる必要があることに注意してください。

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

これは私に含まれている問題のあるリストの1つを与えました:

{ "DEFAULT-OPTIONS" => { "Level" => { "Enable" => "Default" }}}

幸運を :]


圧縮した後、復元する必要がある場合に備えて削除しました。
dandan78

1
私は、これは、ネットワークの多くのコードを沈黙することができませんでした、おそらくそれはサブシステム名を欠いているため見つかりました2016-09-23 15:09:21.354686 ProductName[8823:191206][] tcp_connection_start 3 starting
BaseZen

@BaseZen残念ながら、tcpロギングの問題が含まれていないOPの質問のみに対応しました。この問題への対処に支援が必要な場合は、新しいSO投稿を作成できます。
Sozinの彗星2016

13

これは、Xcode 8ベータリリースノートにあるログに関する既知の問題に関連しています(WWDCのエンジニアにも尋ねました)。

ウォッチシミュレータでWatchOSアプリケーションをデバッグすると、OSが役に立たないログを大量に生成することがあります。(26652255)

現在利用可能な回避策はありません。Xcodeの新しいバージョンを待つ必要があります。

EDIT 7/5/16:これはXcode 8 Beta 2の時点でおそらく修正されています:

Xcode 8ベータ2で解決– IDE

デバッグ中

  • シミュレータでアプリをデバッグすると、ログが表示されます。(26457535)

Xcode 8 Beta 2リリースノート


それも考えましたが、私はwatchOSアプリケーションもwatchOSシミュレータも使用していません。しかし、それはまだ他のシムにも起こるかもしれません。とりあえず保留にして、特定のXcode 8ベータが次の週/月にそれを修正するかどうかを確認します。
HansKnöchel2016年

@HansKnoechelも私ではありませんが、この問題がどのアプリケーションでも発生することを確認できます。リリースノートとWWDCでの議論以外に、アップルからの「公式」の言葉はありません。
JAL

ありがとう、ここも同じです!私たちは、笑、WWDCの間に明日の話をする必要があり:-)
ハンスKnöchel

私のiPhone 5sシミュレータでも起こります。おそらくすべてのシミュレータです。
SimplGy 2016年

私はに署名されているにもかかわらず、この答えにリンクへのアクセスを得ることができませんでしたが、このリンクは動作します:adcdownload.apple.com/WWDC_2016/Xcode_8_beta/...
SimplGy

7

これは、xcode 8.1 (テスト済みバージョン8.1ベータ(8T46g))では問題ではなくなりました。OS_ACTIVITY_MODEスキームから環境変数を削除できます。

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

デバッグ中

•Xcode Debug Consoleは、シミュレータでアプリケーションをデバッグするときに、システムフレームワークからの追加のログを表示しなくなりました。(26652255、27331147)


20
8.1ではまだ多くの偽のロギングが行われています。主に奇妙なソケットとtcp接続に関するもの。他の誰か、または私だけですか?
ジョーダンスミス

3
今日(2016年10月31日)にXcode 8.1をダウンロードしましたが[MC] Reading from private effective user settings.、空の新しいダミープロジェクトの[ファイル]> [新規]> [プロジェクト]から、このようなデバッグログが表示されます。
Zhang

4

ではXcodeの10OS_ACTIVITY_MODEと変数disable(またはdefault)値もオフになりませんNSLogどんな。

したがって、コンソールのノイズを取り除きたいが、自分のログprintf("")は取り除いたくない場合は、OS_ACTIVITY_MODE=の影響を受けないため、NSLogの代わりに古き良きものを試すことができますdisable

ただし、こちらで新しいos_logAPIを確認してください


1

このソリューションは私のために働いています:

  1. シミュレーターでアプリを実行する
  2. システムログを開きます(+ /

これにより、すべてのデバッグデータとNSLogがダンプされます。

NSLogステートメントのみをフィルタリングするには:

  1. それぞれの前に記号を付けます。例: NSLog(@"^ Test Log")
  2. 右上の検索ボックスを使用して結果をフィルタリングします。上記の場合は「^」

これはあなたが得るべきものです:

コンソールのスクリーンショット

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.