Collecte de logs iOS
Rapport de recherche Datadog : Bilan sur l'adoption de l'informatique sans serveur Rapport : Bilan sur l'adoption de l'informatique sans serveur

Collecte de logs iOS

Envoyez des logs à Datadog à partir de vos applications iOS avec la bibliothèque de logging côté client dd-sdk-ios de Datadog. Vous pourrez notamment :

  • Envoyer des logs vers Datadog au format JSON en natif
  • Ajouter du contexte et des attributs personnalisés supplémentaires pour chaque log envoyé
  • Enregistrer les adresses IP et user agents réels du client
  • Optimiser l’utilisation du réseau grâce aux envois groupés automatiques

Remarque : la bibliothèque dd-sdk-androidios prend en charge toutes les versions d’iOS à partir de la version 11.

Configuration

  1. Déclarez la bibliothèque en tant que dépendance en fonction de votre gestionnaire de paquets :

    Vous pouvez utiliser CocoaPods pour installer dd-sdk-ios :

    pod 'DatadogSDK'
    

    Pour réaliser l’intégration grâce au Swift Package Manager d’Apple, ajoutez ce qui suit en tant que dépendance à votre Package.swift :

    .package(url: "https://github.com/Datadog/dd-sdk-ios.git", .upToNextMajor(from: "1.0.0"))
    

    Vous pouvez utiliser Carthage pour installer dd-sdk-ios :

    github "DataDog/dd-sdk-ios"
    
  2. Initialisez la bibliothèque avec le contexte de votre application et votre token client Datadog. Pour des raisons de sécurité, vous devez utiliser un token client : vous ne pouvez pas utiliser les clés d’API Datadog pour configurer la bibliothèque dd-sdk-ios, car elles risqueraient d’être exposées côté client dans le bytecode de l’IPA de l’application iOS. Pour en savoir plus sur la configuration d’un token client, consultez la documentation dédiée :

    Datadog.initialize(
        appContext: .init(),
        configuration: Datadog.Configuration
            .builderUsing(clientToken: "<token_client>", environment: "<nom_environnement>")
            .build()
    )
    
    Datadog.initialize(
        appContext: .init(),
        configuration: Datadog.Configuration
            .builderUsing(clientToken: "<token_client>", environment: "<nom_environnement>")
            .set(logsEndpoint: .eu)
            .build()
    )
    

    Lors de la création de votre application, vous pouvez activer les logs de développement. Tous les messages internes dans la bibliothèque dont la priorité est égale ou supérieure au niveau spécifié sont alors enregistrés dans les logs de la console.

    Datadog.verbosityLevel = .debug
    
  3. Configurez le logger iOS :

    logger = Logger.builder
        .set(serviceName: "app-name")
        .printLogsToConsole(true, usingFormat: .shortWith(prefix: "[iOS App] "))
        .build()
    
  4. Envoyez une entrée de log personnalisée directement à Datadog en utilisant l’une des méthodes suivantes :

    logger.debug("A debug message.")
    logger.info("Some relevant information?")
    logger.notice("Have you noticed?")
    logger.warn("An important warning…")
    logger.error("An error was met!")
    logger.critical("Something critical happened!")
    
  5. (Facultatif) - Fournissez une map d'attributes avec votre message de log pour ajouter des attributs au log envoyé. Chaque entrée de la map est ajoutée en tant qu’attribut.

    logger.info("Clicked OK", attributes: ["context": "onboarding flow"])
    

Logging avancé

Initialisation

Les méthodes suivantes dans Logger.Builder peuvent être utilisées lors de l’initialisation du logger afin d’envoyer des logs à Datadog :

MéthodeDescription
sendNetworkInfo(true)Ajouter des attributs network.client.* à tous les logs. Les données loguées par défaut sont les suivantes : reachability (yes
set(serviceName: "<NOM_SERVICE>")Définir <NOM_SERVICE> en tant que valeur pour l’attribut standard service joint à tous les logs envoyés à Datadog.
printLogsToConsole(true)Définir ce paramètre sur true pour envoyer les logs à la console de debugging.
sendLogsToDatadog(true)Définir ce paramètre sur true pour envoyer les logs à Datadog.
set(loggerName: "<NOM_LOGGER>")Définir <NOM_LOGGER> en tant que valeur pour l’attribut logger.name joint à tous les logs envoyés à Datadog.
build()Créer une instance de logger avec toutes les options définies.

Configuration globale

Vous trouverez ci-dessous des méthodes pour ajouter/supprimer les tags et les attributs de tous les logs envoyés par un logger donné.

Tags globaux

Ajouter des tags

Utilisez la méthode addTag(withKey:value:) pour ajouter des tags à tous les logs envoyés par un logger spécifique :

// Ajouter un tag build_configuration:debug
logger.addTag(withKey: "build_configuration", value: "debug")

Remarque : <VALEUR_TAG> doit être une chaîne.

Supprimer des tags

Utilisez la méthode removeTag(withKey:) pour supprimer des tags de tous les logs envoyés par un logger spécifique :

// Supprimer tous les tags commençant par build_configuration
logger.removeTag(withKey: "build_configuration")

En savoir plus sur les tags Datadog.

Attributs globaux

Ajouter des attributs

Par défaut, les attributs suivants sont ajoutés à tous les logs envoyés par un logger :

  • http.useragent et ses propriétés extraites device et OS
  • network.client.ip et ses propriétés géographiques extraites (country, city)
  • logger.version, la version du SDK Datadog
  • logger.thread_name, (main, background)
  • version, la version de l’application du client extraite de Info.plist
  • environment, le nom de l’environnement utilisé pour initialiser le SDK

Utilisez la méthode addAttribute(forKey:value:) pour ajouter un attribut personnalisé à tous les logs envoyés par un logger spécifique :

// Ajouter un attribut device-model avec une valeur sous forme de chaîne
logger.addAttribute(forKey: "device-model", value: UIDevice.current.model)

Remarque : <VALEUR_ATTRIBUT> peut être n’importe quelle valeur de type encodable (chaîne, date, modèle de données codable personnalisé, etc.)

Supprimer des attributs

Utilisez la méthode removeAttribute(forKey:) pour supprimer un attribut personnalisé de tous les logs envoyés par un logger spécifique :

// Supprimer l'attribut device-model de tous les prochains logs envoyés.
logger.removeAttribute("device-model")

Pour aller plus loin

Documentation, liens et articles supplémentaires utiles: