LoginSignup
13
12

More than 5 years have passed since last update.

プロジェクト毎に NSLog を定義すると便利

Posted at

前置き

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!

利用風景

これで沢山出力することで、例えば以下のようなログが出力されます。

687474703a2f2f692e6779617a6f2e636f6d2f35613662353764353234313061613663663831623038386635643163363731382e706e67.png

プリプロセッサマクロの設定は以下のように行います。

687474703a2f2f692e6779617a6f2e636f6d2f36343365396133623332356138306566356162353337306432373930633861312e706e67.png

Tips

  • モジュール毎に Prefix を分けると、視界に入れなくて良いモジュールのログを無効に出来て便利。
  • モジュール毎に Prefix が付いていると、どこから来たログなのか一目瞭然で便利 (重要)
  • ログレベルを使いたいなど、もっとコントロールしたい人は CocoaLumberjack を使いましょう。
  • モジュールを作る人は特に、NSLog を直接使わず、このようなマクロを使ってログを出力したい。利用者にとっては、NSLog を除去するのだけでも難儀です。

以上です。

13
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
12