Registro en aplicaciones iOS

improve this page | report issue

Visión general

Esta guía de aprendizaje proporciona fragmentos de código con el propósito de añadir funcionalidades de creación de registro en aplicaciones iOS.

Requisito previo: Asegúrese de leer la visión general de recopilación de registro del lado del cliente.

Nota: La utilización de OCLogger en Swift precisa la creación de una clase de extensión OCLogger (esta clase puede ser un archivo Swift distinto, o una extensión de su archivo Swift actual):

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

Después de incluir la clase de extensión podrá entonces utilizar OCLogger en Swift.

Habilitación de la captura de registro

De forma predeterminada, la captura de registro está habilitada. La captura de registro, que es posible habilitar e inhabilitar mediante programación, guarda registros en el cliente. Los registros se envían al servidor con una llamada de envío explícita, o mediante un registro automático.

Nota: La habilitación de la captura del registro en niveles de detalle elevados puede afectar al consumo de la CPU del dispositivo, el espacio del sistema de archivos y el tamaño de la carga útil cuando el cliente envía registros a través de la red.

Para inhabilitar la captura de registro:

Objective-C

[OCLogger setCapture:NO];

Swift

OCLogger.setCapture(false);

Envío de registros capturados

Envíe los registros a MobileFirst de acuerdo a la lógica de su aplicación. También es posible habilitar el registro automático para enviar registros. Si los registros no se envían antes de que alcancen el tamaño máximo, el archivo de registro se depura en favor de registros más recientes.

Nota: Adopte el siguiente patrón al recopilar datos de registro. El envío de datos de forma periódica garantiza que está viendo sus datos de registro en tiempo casi real en 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)

Para asegurarse de que todos los registros capturados se envían, considere un de las siguientes estrategias:

  • Llamar al método send en un intervalo de tiempo.
  • Llamar al método send desde las llamadas de retorno de suceso del ciclo de vida de la aplicación.
  • Incremente el tamaño máximo de archivo del almacenamiento intermedio de registro persistente (en bytes):

Objective-C

[OCLogger setMaxFileSize:150000];

Swift

OCLogger.setMaxFileSize(150000);

Envío de registro automático

De forma predeterminada, el envío de registro automático está habilitado. Cada vez que se envía una solicitud de recurso satisfactoria al servidor, también se envían los registros capturados, con un intervalo mínimo de 60 segundos entre envíos. El envío de registro automático se puede habilitar o inhabilitar desde el cliente. De forma predeterminada, el envío de registro automático está habilitado.

Objective-C

Para habilitar:

[OCLogger setAutoSendLogs:YES];

Para inhabilitar:

[OCLogger setAutoSendLogs:NO];

Swift

Para habilitar:

OCLogger.setAutoSendLogs(true);

Para inhabilitar:

OCLogger.setAutoSendLogs(false);

Cambiar el intervalo de autoSendLog

De forma predeterminada, el intervalo de autoSendLog se establece en 60 segundos. El intervalo de AutoSendLog se puede modificar utilizando el método siguiente.

Objective-C

Para establecer el intervalo de autoSendLog en 120 segundos, consulte el siguiente fragmento.

[OCLogger setAutoSendLogs:YES interval:120];

Swift

Para establecer el intervalo de autoSendLog en 120 segundos, consulte el siguiente fragmento.

OCLogger.setAutoSendLogs(true, 120);

Ajuste preciso con la API Logger

El SDK de cliente de MobileFirst utiliza internamente la API Logger. De forma predeterminada, se capturan las entradas de registro que el SDK realiza. Para un ajuste fino en la recopilación del registro, utilice instancias de Logger con nombres de paquete. También puede controlar qué nivel de registro se captura mediante las analíticas utilizando filtros desde el lado del servidor.

Objective-C

A modo de ejemplo de captura de registros únicamente cuando el nivel es ERROR para el nombre de paquete myApp, siga estos pasos.

  1. Utilice una instancia de Logger con el nombre de paquete myApp.

    OCLogger *logger = [OCLogger getInstanceWithPackage:@"MyApp"];
    
  2. Opcional: Especifique un filtro para restringir la captura de registro y la salida de registro a únicamente el nivel y paquete especificados mediante programación.

    [OCLogger setFilters:@{@"MyApp": @(OCLogger_ERROR)}];
    
  3. Opcional: Controle los filtros de manera remota recuperando un perfil de configuración de servidor.

Swift

  1. Utilizando la extensión explicada en la Visión general, cree una instancia del registrador para su paquete.

    let logger : OCLogger = OCLogger.getInstanceWithPackage("MyTestLoggerPackage");
    
  2. Opcional: Especifique un nivel de registro.

    OCLogger.setLevel(OCLogger_DEBUG);
    
  3. Opcional: Controle los filtros de manera remota recuperando un perfil de configuración de servidor.

Recuperación de perfiles de configuración del servidor

Los niveles de registro cronológico se puede establecer por el cliente, o recuperando perfiles de configuración del servidor. Desde MobileFirst Analytics Console, se puede establecer de forma global un nivel de registro (todas las instancias de Logger) o para un paquete o paquetes específicos. Para obtener información sobre cómo configurar el filtro desde MobileFirst Analytics Console, consulte Configuración de filtros de registro. Para que el cliente recupere la configuración del servidor, se debe llamar al método updateConfigFromServer desde un lugar en el código que se ejecute de forma regular como, por ejemplo en las llamadas de retorno del ciclo de vida de la aplicación.

Objective-C

[OCLogger updateConfigFromServer];

Swift

 OCLogger.updateConfigFromServer();

Ejemplo de creación de registro

La salida se dirige a la consola JavaScript del navegador, LogCat o la consola 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 May 13, 2020