前置き
NSLog
を生で使うと、往々にして結局 NSLog
を後で剥がすハメになります。理由は以下のようなものですね。
- プロダクションでログを出したくない
- パフォーマンスに影響がある
- 沢山出てウザい
- 他の人のログが沢山出てきてウザい etc..
対策
しかし、デバッグのために出力しておきたいログは山ほどあります。
#ifdef DEBUG
で頑張っても良いですが、次のようなマクロを定義するともっと便利です。
(YOUR
などは空気を読んで置換してください)
#if YOUR_DEBUG
#define YOURLog(...) NSLog(@"YOUR_APP: %@", [NSString stringWithFormat:__VA_ARGS__]);
#else
#define YOURLog(...)
#endif
これを定義することで、通常の NSLog
のように使うことができ、なおかつプリプロセッサマクロで自由に取り外しが出来る NSLog
が作れます。リリースビルドでは勝手に消えてくれます。
YOURLog(@"Log %@", @"it!");
YOUR_APP: Log it!
利用風景
これで沢山出力することで、例えば以下のようなログが出力されます。
プリプロセッサマクロの設定は以下のように行います。
Tips
- モジュール毎に Prefix を分けると、視界に入れなくて良いモジュールのログを無効に出来て便利。
- モジュール毎に Prefix が付いていると、どこから来たログなのか一目瞭然で便利 (重要)
- ログレベルを使いたいなど、もっとコントロールしたい人は CocoaLumberjack を使いましょう。
- モジュールを作る人は特に、
NSLog
を直接使わず、このようなマクロを使ってログを出力したい。利用者にとっては、NSLog
を除去するのだけでも難儀です。
以上です。