Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

前置き

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 を除去するのだけでも難儀です。

以上です。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away