私のiOSプロジェクトでは、1台のサードパーティライブラリを使用しています。デバッグ出力にフィルタリングを適用できますか?Xcodeでコンソール出力をフィルタリングする方法
答えて
Xcode 5.0から7.3、Apple no longer supports Xcode plug-ins as of Xcode 8.0で動作します。
MCLogは、あなたが探しているものです。
これはXCodeプラグインです。
ええと...もう働かない。 githubは同じ状態であり、誰も気にしないようです。 –
ライブラリがNSLogを使用している場合、ライブラリを再定義して、ライブラリからのログメッセージを破棄できます。例コード:
#define NSLog(args...) [[Logger singleton] debugWithLevel:kDebug line:__LINE__ funcName:__PRETTY_FUNCTION__ message:args];
// poor man's nslog
@interface Logger : NSObject
typedef enum {
kTrace=0, kDebug=1, kInfo=2, kWarn=3, kError=4, KSilent=5
} LoggerLevel;
// ...
@implementation Logger
+(Logger *)singleton {
static dispatch_once_t pred;
static Logger *shared = nil;
dispatch_once(&pred, ^{
shared = [[Logger alloc] init];
shared.logThreshold = kTrace;
});
return shared;
}
-(void) debugWithLevel:(LoggerLevel)level
line:(int)line
funcName:(const char *)funcName
message:(NSString *)msg, ... {
va_list ap;
va_start (ap, msg);
msg = [[[NSString alloc] initWithFormat:msg arguments:ap] autorelease];
va_end (ap);
msg = [NSString stringWithFormat:@"%s %50s:%3d - %@", levelName[level], funcName, line, msg];
// ... filter by class name ...
fprintf(stdout,"%s\n", [msg UTF8String]);
}
@end
funcName
には、メッセージを送信するクラス名とメソッドが含まれています。ライブラリが良い市民で、接頭辞で始まるクラスを持っている場合は、classNameがそれで始まる場合は出力を破棄します。それ以外の場合は、そのライブラリからクラスのリストをロードし、fprintf行の前にチェックする必要があります。
もちろん、NSLogと同じようにログをsyslogdに複製するのではなく、誰が気にしますか。 :P
これは、プロジェクトまたはバイナリライブラリでサードパーティライブラリのソースコードを直接使用しているかどうかによって異なります。
ソースコードを使用している場合は、メッセージの記録に使用しているものを確認することをお勧めします。冗長性を減らす方法があるかもしれません。彼らが平文NSLog
を使用している場合、唯一の選択肢は、Janoが提案したように、フィルタリングを行うためにNSLog
を再定義することです。
彼らはprintf
などのような低レベルの機能を使用している場合は、あなたの最良のオプションは、独自のカスタムログマクロに置き換える、などのことです。
#ifdef DEBUG_3P
#define LOG_3P(str) NSLog(@"%s", str)
#else
#define LOG_3P(str) /* nothing */
#endif
その後、LOG_3P("a c string message")
でprintf("a c string message")
を交換してください。あなたは、ソリューションをカスタマイズしたり、マクロパラメータを調整したり、場合に応じていくつかのマクロを追加したりする必要があります。それが動作するまで、いくつかの検索と置換を行います。
サードパーティライブラリのログを表示するには、Cフラグ:-D DEBUG_3P
としてビルド設定にDEBUG_3P
を定義するだけです。それ以外の場合はミュートになります。
バイナリライブラリを使用している場合は、リリース設定でビルドするだけで、ログの冗長性を最小限に抑えるか、減らすことができます。
Swiftの場合、私はprint()のまわりにこれを行うラッパーを記述しました。ここをクリックしてください:https://github.com/SebastianMecklenburg/TagLog
これは、デバッグメッセージにタグを追加し、それらのタグで出力をフィルタリングすることによって機能します。これはコード内で動作し、Xcodeプラグインは必要ありません。
'print()'コマンドでコンソールに送信されるサードパーティのテキストをフィルタリングしますか? –
- 1. Xcode出力コンソールにC++出力を表示する方法
- 2. Xcodeコンソール出力の品質を改善する方法
- 3. Xcodeコンソールのデバッグ出力
- 4. Eclipseでのコンソール出力のフィルタリング
- 5. コンソールでのFirebase Xcodeの出力
- 6. C++ Xcode-色を出力する方法
- 7. コンソールの出力をコンソールにリダイレクトする方法
- 8. cinのコンソール出力を防ぐ方法
- 9. iOS/Xcode:コンソールをデバッグするための出力結果posix_spawn()
- 10. Python 3:出力をコンソールとファイルの両方に出力する方法
- 11. NativeScript Webview - コンソール出力の表示方法
- 12. Pythonでコンソール出力を編集する方法
- 13. 文字列をC++でコンソールに出力する方法
- 14. Gradleでは、コンソール/イベントログにメッセージを出力する方法は?
- 15. phantomjsでhtmlソースをコンソールに出力する方法
- 16. Visual Studioコンソール出力でスタックトレースを作成する方法
- 17. Visual Studio 2012でコンソール出力を取得する方法ユニットテスト
- 18. JPanelにコンソールに出力するクラスを追加する方法
- 19. xcodeコンソール出力を端末9.1に変更します
- 20. Windows 10のUWPでコンソールに出力する方法は?
- 21. C++/Windowsでコンソールに出力する方法
- 22. デバッグモードでコンソールに出力するlog4netの設定方法
- 23. ログ出力NGINXファイルにコンソール出力Node.jsアプリを追加する方法は?
- 24. Java:コンソールのすべての出力をコンソールとファイルに出力する方法は?
- 25. Swift:print()コマンドがXcode 7.3.1でコンソールに出力されない
- 26. XCodeで出力(コンソール)画面が消えましたか?
- 27. MonoTouch - XCodeのオーガナイザでのコンソール出力の向上
- 28. C#パラメータでコンソール出力を読み取る方法
- 29. アンドロイドでコンソール出力を増やす方法ログクラス
- 30. Phonegap:出力JSはXCodeコンソールにログします
実際の解決策ではないかもしれませんが、[MCLog](https://github.com/yuhua-chen/MCLog)は出力フィルタリングを可能にするXCodeプラグインです。 – david
@david Thx、「MCLog」は私が必要とするものを正確に実行するので、私はこのコメントを最良の答えとして受け入れるべきです。 – ArtFeel
答えとして私のコメントをコピーしました。 – david