2011/12/19

NSLoggerで手軽にログを取る方法について

NSLoggerはiOSとOS X上で動作するロガーです。簡単に言えばNSLogの代わりとなるようなものですが、次のような特徴を持っています。

  • ログにレベルやタグを指定できる。
  • 画像をログに出せる。
  • Mac OS X上で動作する専用ビューワで内容を確認できる。フィルタや検索も可能。
  • 専用ビューワでリモート接続されたアプリのログが表示できる (デフォルトでSSLを利用)。
  • ログを保存して後で見ることができる。

いろいろ多機能にも関わらず導入は簡単で、使いかたもNSLogと大差ありません。そこで、本記事ではNSLogger 1.0をXcode 4.2に導入する手順と、簡単な利用法を紹介します。

なお、NSLoggerはARCに対応しており、BSDライセンスで提供されています。

ダウンロードとテスト

まずダウンロードしてサンプルアプリをコンパイルして動作確認を行います。

  1. NSLoggerのダウンロードページからNSLogger 1.0.zipをダウンロードします。
  2. ダウンロードしたファイルを解凍し、NSLogger.appを/Applicationsにでも入れておきます。
  3. NSLogger.appを起動しておきます。次のようなステータスウィンドウが表示されるはずです。
  4. ディレクトリExamples内にサンプルがありますのでコンパイルして実行します。
  5. Start Sending Logsをタップします。
  6. ログウィンドウが開き、ログが表示されていきます。

ログビューワの利用法

ログビューワNSLogger.appの利用法を簡単に紹介します。

メインウィンドウを次に示します。右ペインにログが表示されます。ここには時間、スレッド、タグ、ログメッセージ、ログの画像が表示されていきます。

ステータスバーにある f ボタンを押すと各ログメッセージにファイル、行数、関数名などが表示されます。これは後で少しだけ紹介する、末尾に F が付いているログ関数を利用すると表示することができます。

右下は簡易フィルタです。レベル、タグで条件に当てはまるものだけ表示することができます。

左下はフィルタです。次の例は適当なものですが、このように関数名やログレベルを条件にすることができます。

アプリケーションへの導入

自分のアプリへの導入は次のような手順で行います。

  1. Add to your project/iOS - Mac OS X内にある次の3ファイルをプロジェクトに追加します。

    • LoggerCommon.h
    • LoggerClient.h
    • LoggerClient.m
  2. 次の2フレームワークを追加します。

    • CFNetwork.framework
    • SystemConfiguration.framework
  3. 後は次の関数を呼ぶだけです。第1引数がタグ、第2引数がログレベル、第3引数以降がフォーマット付き文字列になります。

    LogMessage(@"network", 0, @"なんかのエラー: %@", url);

基本API

NSLoggerの基本APIの一部を次に示します。

void LogMessageCompat(NSString *format, ...);
void LogMessage(NSString *tag, int level, NSString *format, ...);
void LogData(NSString *tag, int level, NSData *data);
void LogImageData(NSString *tag, int level, int width, int height, NSData *data);
void LogMarker(NSString *text);

LogMessageCompatがNSLogと同じようにメッセージを出力するものです。LogImageDataで画像を出力できたりします。詳細や他の関数などはNSLogger APIを参照してください。

NSLogger.appの自動起動

Edit SchemeでRun MyApp.appのPre-actionsにopen -g -a NSLoggerと記述しておくことで、デバッグ時に自動でNSLogger.appが起動するようになります。

マクロの登録

NSLogのときと同様の方法でデバッグビルド時のみログ出力を有効にすることもできます。個人的にはApache Log4jのログレベルを参考にしつつ、末尾に F が付いているログ関数を使って、MyApp-prefix.pchに次のように書いて用いています。

#ifdef DEBUG
    #import "LoggerClient.h"
    #define XLOG_FATAL   0
    #define XLOG_ERROR   1
    #define XLOG_WARNING 2
    #define XLOG_INFO    3
    #define XLOG_DEBUG   4
    #define XLOG_TRACE   5
    #define XLog(tag,level,...)            LogMessageF  (__FILE__,__LINE__,__FUNCTION__,tag,level,__VA_ARGS__)
    #define XLogData(tag,level,w,h,data)   LogDataF     (__FILE__,__LINE__,__FUNCTION__,tag,level,    data)
    #define XLogImage(tag,level,w,h,data)  LogImageDataF(__FILE__,__LINE__,__FUNCTION__,tag,level,w,h,data)
    #define XLogMarker(text)               LogMarker(text)
#else
    #define XLog(...)         do{}while(0)
    #define XLogData(...)     do{}while(0)
    #define XLogImage(...)    do{}while(0)
    #define XLogMarker(...)   do{}while(0)
#endif

まとめ

NSLoggerの導入手順と簡単な利用法を紹介しました。

関連リンク

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。