iOSアプリ開発でログにクラス名とメソッド名を出力する方法

iOSアプリ開発でログを出力する場合「NSLog」を使用するが、「NSLog」の出力には出力したクラス名やメソッド名が含まれない。
これだとログに出力する文言に気を使っておかなければ、不具合箇所を特定するのに時間がかかることがある。
今回はログにクラス名とメソッド名を出力する方法を紹介する。

<通常のNSLogサンプルコード>

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    NSLog(@"おおおおお");
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
}

@end

<出力結果>

2014-11-27 20:18:58.787 LogSample[10128:65319] おおおおお

<今回紹介する方法の出力結果>

2014-11-27 20:18:58.787 LogSample[10128:65319] -[ViewController viewDidLoad] おおおおお

[ ]内を見る事で「ViewController」クラスの「viewDidLoad」メソッドから出力されたログである事が明確に分かる様になる。

<方法概要>
PCHファイル(<プロジェクト名-Prefix.pch>)に拡張したログを定義する。

(注意)
PCHファイルはXcode6から自動で生成されなくなった。
手動で作成する方法は「Xcode6でPCHファイルを追加する方法」を参照のこと。

<方法詳細>
プロジェクトツリー上からPCHファイル(<プロジェクト名-Prefix.pch>)を選択し表示させる。
表示したファイル内に下記の定義を追加する。

#define ExLog(format, ...) NSLog((@"%s: "format), __PRETTY_FUNCTION__, ##__VA_ARGS__)

解説:
「ExLog」という識別子をNSLogを拡張して定義している。
「__PRETTY_FUNCTION__」がクラス名・メソッド名を意味し、「%s」の箇所に出力される様に設定している。

<使用方法>
ログを出力する際は、「NSLog」ではなく、「ExLog」を使用する。
サンプルコードを下記に示す。

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    ExLog(@"おおおおお");
	//↑ポイント(「NSLog」ではなく新たに定義した「ExLog」を使用)
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
}

@end

<出力結果>

2014-11-27 20:38:04.857 LogSample[10963:71688] -[ViewController viewDidLoad]: おおおおお

Enjoy Programing!!

<関連記事>
iOSアプリ開発でログにクラス名とメソッド名を出力する方法(本記事)
iOSアプリ開発でログにログレベルを導入する方法
iOSアプリ開発でNSErrorの情報を出力する拡張NSLogを定義する方法

<お勧め書籍>

詳解 Objective-C 2.0 第3版
iOSアプリ開発技術者として仕事をするのであれば、必ず読んでおくべき書籍である。
筆者も何度も繰り返し精読している。