iOS アプリケーションでのロギング

improve this page | report issue

概説

このチュートリアルでは、iOS アプリケーションでロギング機能を追加するために必要なコード・スニペットを示します。

前提条件: 必ずクライアント・サイドのログ収集の概説をお読みください。

注: Swift で OCLogger を使用するには、OCLogger 拡張クラスを作成する必要があります (このクラスは別個の Swift ファイルであるか、現行 Swift ファイルの拡張にします)。

extension OCLogger {
    //Log methods with no metadata

    func logTraceWithMessages(message:String, _ args: CVarArgType...) {
        logWithLevel(OCLogger_TRACE, message: message, args:getVaList(args), userInfo:Dictionary<String, String>())
    }

    func logDebugWithMessages(message:String, _ args: CVarArgType...) {
        logWithLevel(OCLogger_DEBUG, message: message, args:getVaList(args), userInfo:Dictionary<String, String>())
    }

    func logInfoWithMessages(message:String, _ args: CVarArgType...) {
        logWithLevel(OCLogger_INFO, message: message, args:getVaList(args), userInfo:Dictionary<String, String>())
    }

    func logWarnWithMessages(message:String, _ args: CVarArgType...) {
        logWithLevel(OCLogger_WARN, message: message, args:getVaList(args), userInfo:Dictionary<String, String>())
    }

    func logErrorWithMessages(message:String, _ args: CVarArgType...) {
        logWithLevel(OCLogger_ERROR, message: message, args:getVaList(args), userInfo:Dictionary<String, String>())
    }

    func logFatalWithMessages(message:String, _ args: CVarArgType...) {
        logWithLevel(OCLogger_FATAL, message: message, args:getVaList(args), userInfo:Dictionary<String, String>())
    }

    func logAnalyticsWithMessages(message:String, _ args: CVarArgType...) {
        logWithLevel(OCLogger_ANALYTICS, message: message, args:getVaList(args), userInfo:Dictionary<String, String>())
    }

    //Log methods with metadata

    func logTraceWithUserInfo(userInfo:Dictionary<String, String>, message:String, _ args: CVarArgType...) {
        logWithLevel(OCLogger_TRACE, message: message, args:getVaList(args), userInfo:userInfo)
    }

    func logDebugWithUserInfo(userInfo:Dictionary<String, String>, message:String, _ args: CVarArgType...) {
        logWithLevel(OCLogger_DEBUG, message: message, args:getVaList(args), userInfo:userInfo)
    }

    func logInfoWithUserInfo(userInfo:Dictionary<String, String>, message:String, _ args: CVarArgType...) {
        logWithLevel(OCLogger_INFO, message: message, args:getVaList(args), userInfo:userInfo)
    }

    func logWarnWithUserInfo(userInfo:Dictionary<String, String>, message:String, _ args: CVarArgType...) {
        logWithLevel(OCLogger_WARN, message: message, args:getVaList(args), userInfo:userInfo)
    }

    func logErrorWithUserInfo(userInfo:Dictionary<String, String>, message:String, _ args: CVarArgType...) {
        logWithLevel(OCLogger_ERROR, message: message, args:getVaList(args), userInfo:userInfo)
    }

    func logFatalWithUserInfo(userInfo:Dictionary<String, String>, message:String, _ args: CVarArgType...) {
        logWithLevel(OCLogger_FATAL, message: message, args:getVaList(args), userInfo:userInfo)
    }

    func logAnalyticsWithUserInfo(userInfo:Dictionary<String, String>, message:String, _ args: CVarArgType...) {
        logWithLevel(OCLogger_ANALYTICS, message: message, args:getVaList(args), userInfo:userInfo)
    }
}

拡張クラスを含めると、Swift で OCLogger を使用できるようになります。

ログ・キャプチャーの有効化

デフォルトでは、ログ・キャプチャーは有効になっています。 ログ・キャプチャーは、クライアントにログを保存し、プログラムで有効または無効にすることができます。 ログは、明示的な送信呼び出しまたは自動ログによってサーバーに送信されます。

注: 詳細度を指定してログ・キャプチャーを有効にすることで、デバイス CPU やファイル・システム・スペースの消費、クライアントがネットワークでログを送信するときのペイロードのサイズに影響する可能性があります。

ログ・キャプチャーを無効にするには、以下のようにします。

Objective-C

[OCLogger setCapture:NO];

Swift

OCLogger.setCapture(false);

キャプチャーしたログの送信

アプリケーションのロジックに基づいて、ログを MobileFirst に送信します。 自動ログ送信を有効にして、自動的にログを送信することもできます。 ログの最大サイズに達する前にログが送信されないと、ログ・ファイルがより新しいログで消去されます。

注: ログ・データを収集する場合は、以下のパターンを採用してください。 データを定期的に送信すると、MobileFirst Analytics Consoleでログ・データをほぼリアルタイムで見られるようにすることができます。

Objective-C

[NSTimer scheduledTimerWithTimeInterval:60
  target:[OCLogger class]
  selector:@selector(send)
  userInfo:nil
  repeats:YES];

Swift

var timer = NSTimer.scheduledTimerWithTimeInterval(60,
  target:OCLogger.self,
  selector: #selector(OCLogger.send),
  userInfo: nil,
  repeats: true)

キャプチャーしたすべてのログが確実に送信されるようにするために、以下のいずれかの方法を検討してください。

  • 一定の時間インターバルで send メソッドを呼び出す。
  • アプリケーション・ライフサイクル・イベント・コールバック内から send メソッドを呼び出す。
  • 以下のようにして、永続ログ・バッファーの最大ファイル・サイズを増やす (バイト単位)。

Objective-C

[OCLogger setMaxFileSize:150000];

Swift

OCLogger.setMaxFileSize(150000);

自動ログ送信

デフォルトでは、自動ログ送信が有効になっています。 正常なリソース要求がサーバーに送信されるたびに、キャプチャーされたログも最小で 60 秒の送信間隔で送信されます。 自動ログ送信は、クライアントから有効または無効にすることができます。

Objective-C

有効にするには、以下のようにします。

[OCLogger setAutoSendLogs:YES];

無効にするには、以下のようにします。

[OCLogger setAutoSendLogs:NO];

Swift

有効にするには、以下のようにします。

OCLogger.setAutoSendLogs(true);

無効にするには、以下のようにします。

OCLogger.setAutoSendLogs(false);

autoSendLog インターバルの変更

デフォルトでは、autoSendLog インターバル は 60 秒に設定されています。 autoSendLog インターバル は、次のメソッドを使用して変更できます。

Objective-C

autoSendLog インターバルを 120 秒に設定するには、次のスニペットを参照してください。

[OCLogger setAutoSendLogs:YES interval:120];

Swift

autoSendLog インターバルを 120 秒に設定するには、次のスニペットを参照してください。

OCLogger.setAutoSendLogs(true, 120);

Logger API による細かい調整

MobileFirst クライアント SDK は、Logger API を内部で利用します。 デフォルトでは、SDK によって作成されたログ・エントリーをキャプチャーしています。 ログ収集を細かく調整するには、パッケージ名を指定してロガー・インスタンスを使用します。 サーバー・サイドのフィルターを使用して、分析でどのロギング・レベルをキャプチャーするかを制御することもできます。

Objective-C

パッケージ名が myApp で、レベルが ERROR のログのみをキャプチャーする例のステップを以下に示します。

  1. パッケージ名 myApp を指定して、logger インスタンスを使用します。

    OCLogger *logger = [OCLogger getInstanceWithPackage:@"MyApp"];
    
  2. **オプション: **指定されたレベルとパッケージのみにログ・キャプチャーとログ出力をプログラムで制限するフィルターを指定します。

    [OCLogger setFilters:@{@"MyApp": @(OCLogger_ERROR)}];
    
  3. オプション: サーバー構成プロファイルを取り出して、リモートでフィルターを制御します。

Swift

  1. 『概説』で説明されているとおりに拡張を使用して、パッケージのロガー・インスタンスを作成します。

    let logger : OCLogger = OCLogger.getInstanceWithPackage("MyTestLoggerPackage");
    
  2. オプション: ロギング・レベルを指定します。

    OCLogger.setLevel(OCLogger_DEBUG);
    
  3. オプション: サーバー構成プロファイルを取り出して、リモートでフィルターを制御します。

サーバー構成プロファイルの取り出し

ロギング・レベルは、クライアントが設定することも、サーバーから構成プロファイルを取得することによって設定することもできます。 MobileFirst Analytics Console から、ログ・レベルは、グローバル (すべてのロガー・インスタンス) に設定することも、特定のパッケージ (複数可) に設定することも可能です。 MobileFirst Analytics Consoleからのフィルターの構成については、『ログ・フィルターの構成』を参照してください。 クライアントがサーバーから構成を取り出すには、アプリケーション・ライフサイクル・コールバック内など、定期的に実行されるコード内の場所から updateConfigFromServer メソッドを呼び出す必要があります。

Objective-C

[OCLogger updateConfigFromServer];

Swift

 OCLogger.updateConfigFromServer();

ロギングの例

ブラウザーの JavaScript コンソール、LogCat、または Xcode コンソールに出力します。

Objective-C

#import "OCLogger.h"
+ (int) sum:(int) a with:(int) b{
    int sum = a + b;
    [OCLogger setLevel:DEBUG];
    OCLogger* mathLogger = [OCLogger getInstanceWithPackage:@"MathUtils"];
    NSString* logMessage = [NSString stringWithFormat:@"sum called with args %d and %d. Returning %d", a, b, sum];
    [mathLogger debug:logMessage];
    return sum;
}

Swift

func sum(a: Int, b: Int) -> Int{
    var sum = a + b;
    let logger = OCLogger.getInstanceWithPackage("MathUtils");

    logger.logInfoWithMessages("sum called with args /(a) and /(b). Returning /(sum)");
    return sum;
}
Inclusive terminology note: The Mobile First Platform team is making changes to support the IBM® initiative to replace racially biased and other discriminatory language in our code and content with more inclusive language. While IBM values the use of inclusive language, terms that are outside of IBM's direct influence are sometimes required for the sake of maintaining user understanding. As other industry leaders join IBM in embracing the use of inclusive language, IBM will continue to update the documentation to reflect those changes.
Last modified on June 17, 2020