Protokollierung in iOS-Anwendungen

improve this page | report issue

Übersicht

Dieses Lernprogramm enthält die Code-Snippets, die erforderlich sind, um Protokollierungsfähigkeiten zu iOS-Anwendungen hinzuzufügen.

Voraussetzung: Sie müssen die Übersicht über die clientseitige Protokollerfassung gelesen haben.

Hinweis: Die Verwendung von OCLogger in Swift erfordert die Erstellung einer OCLogger-Erweiterungsklasse. (Diese Klasse kann eine gesonderte Swift-Datei oder eine Erweiterung Ihrer bestehenden Swift-Datei sein.)

extension OCLogger {
// Protokollmethoden ohne Metadaten

    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>())
    }

    // Protokollmethoden mit Metadaten

    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)
    }
}

Nach Aufnahme der Erweiterungsklasse können Sie OCLogger in Swift verwenden.

Protokollerfassung aktivieren

Die Protokollerfassung ist standardmäßig aktiviert. Sie speichert Protokolle im Client und kann programmgesteuert aktiviert oder inaktiviert werden. Protokolle werden mit einem expliziten Sendeaufruf oder automatisch an den Server gesendet.

Hinweis: Die Aktivierung der Protokollerfassung auf einer Ebene mit großer Ausführlichkeit kann sich auf die CPU-Nutzung des Geräts, auf den Dateisystemspeicher und den Umfang der Nutzdaten, die der Client mit den Protokollen über das Netz sendet, auswirken.

Inaktivieren Sie die Protokollerfassung wie folgt:

Objective-C

[OCLogger setCapture:NO];

Swift

OCLogger.setCapture(false);

Erfasste Protokolle senden

Sie können Protokolle gemäß Ihrer Anwendungslogik an MobileFirst senden. Sie können auch das automatische Senden von Protokollen aktivieren. Wenn Protokolle nicht vor dem Erreichen ihrer maximalen Größe gesendet werden, wird die Protokolldatei zugunsten aktuellerer Protokolle bereinigt.

Hinweis: Übernehmen Sie das folgende Muster für die Erfassung von Protokolldaten. Durch das regelmäßige Senden von Daten stellen Sie sicher, dass Sie Ihre Protokolldaten in der MobileFirst Analytics Console annähernd in Echtzeit sehen.

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)

Mit folgenden Strategien können Sie sicherstellen, dass alle erfassten Protokolle gesendet werden:

  • Rufen Sie die Methode send in einem bestimmten Zeitintervall auf.
  • Rufen Sie die Methode send innerhalb von Callbacks zu Lebenszyklusereignissen auf.
  • Erhöhen Sie den Wert für die maximale Größe des persistenten Protokollpuffers (in Bytes).

Objective-C

[OCLogger setMaxFileSize:150000];

Swift

OCLogger.setMaxFileSize(150000);

Protokolle automatisch senden

Das automatische Senden von Protokollen ist standardmäßig inaktiviert. Immer, wenn eine Ressourcenanforderung erfolgreich an den Server gesendet wird, werden auch die erfassten Protokolle gesendet, wobei zwischen den Sendevorgängen ein zeitlicher Abstand von mindestens 60 Sekunden liegen muss. Das automatische Senden von Protokollen kann vom Client aktiviert oder inaktiviert werden. Standardmäßig ist das automatische Senden von Protokollen inaktiviert.

Objective-C

Aktivierung:

[OCLogger setAutoSendLogs:YES];

Inaktivierung:

[OCLogger setAutoSendLogs:NO];

Swift

Aktivierung:

OCLogger.setAutoSendLogs(true);

Inaktivierung:

OCLogger.setAutoSendLogs(false);

Intervall für autoSendLog ändern

Das Intervall für autoSendLog ist standardmäßig auf 60 Sekunden gesetzt. Sie können das Intervall für autoSendLog mit folgender Methode ändern.

Objective-C

Das folgende Snippet zeigt, wie das Intervall für autoSendLog auf 120 Sekunden gesetzt wird.

[OCLogger setAutoSendLogs:YES interval:120];

Swift

Das folgende Snippet zeigt, wie das Intervall für autoSendLog auf 120 Sekunden gesetzt wird.

OCLogger.setAutoSendLogs(true, 120);

Optimierung mit der Logger-API

Das MobileFirst-Client-SDK nutzt intern die Logger-API. Vom SDK erstellte Protokolleinträge werden standardmäßig erfasst. Zur Optimierung der Protokollerfassung können Sie Logger-Instanzen mit Paketnamen verwenden. Mit serverseitigen Filtern können Sie außerdem die Protokollierungsstufe steuern.

Objective-C

Wenn Sie beispielsweise für das Paket myApp nur Protokolle der Stufe ERROR erfassen möchten, gehen Sie wie folgt vor:

  1. Verwenden Sie eine Logger-Instanz mit dem Paketnamen myApp.

    OCLogger *logger = [OCLogger getInstanceWithPackage:@"MyApp"];
    
  2. Bei Bedarf können Sie einen Filter angeben, um die Protokollerfassung und -ausgabe programmgesteuert auf die angegebene Stufe und das angegebene Paket zu beschränken.

    [OCLogger setFilters:@{@"MyApp": @(OCLogger_ERROR)}];
    
  3. Optional: Steuern Sie die Filter über Fernzugriff. Rufen Sie dazu ein Serverkonfigurationsprofil ab.

Swift

  1. Erstellen Sie eine Logger-Instanz für Ihr Paket. Verwenden Sie dazu die Erweiterung wie in der Übersicht erläutert.

    let logger : OCLogger = OCLogger.getInstanceWithPackage("MyTestLoggerPackage");
    
  2. Optional: GebenSie eine Protokollierungsstufe an.

    OCLogger.setLevel(OCLogger_DEBUG);
    
  3. Optional: Steuern Sie die Filter über Fernzugriff. Rufen Sie dazu ein Serverkonfigurationsprofil ab.

Serverkonfigurationsprofile abrufen

Die Protokollierungsstufen können vom Client festgelegt werden oder über das Abrufen von Konfigurationsdateien vom Server. In der MobileFirst Analytics Console kann eine Protokollierungsstufe global (für alle Logger-Instanzen) oder für bestimmte Pakete festgelegt werden. Informationen zum KOnfigurieren der Filter in der MobileFirst Analytics Console finden Sie unter Protokollfilter konfigurieren.

Damit der Client die Konfiguration vom Server abruft, muss die Methode updateConfigFromServer von einem Abschnitt des Codes aufgerufen werden, der regulär ausgeführt wird, z. B. von den App-Lebenszyklus-Callbacks.

Objective-C

[OCLogger updateConfigFromServer];

Swift

 OCLogger.updateConfigFromServer();

Protokollierungsbeispiel

Die Ausgabe erfolgt in einem Browser in einer JavaScript-Konsole, in LogCat oder in der Xcode-Konsole.

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 May 13, 2020