Journalisation pour Swift (iOS/macOS) : meilleures bibliothèques et solutions

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Journalisation pour Swift (iOS/macOS) : meilleures solutions



La journalisation est l'un des outils clés pour les développeurs d'applications iOS et macOS. Elle permet de suivre l'exécution du code, de trouver des bugs, d'analyser le comportement des utilisateurs et de diagnostiquer les problèmes en production. Dans l'écosystème Swift, il existe de nombreuses bibliothèques et approches pour organiser la journalisation. Dans cet article, nous examinerons les meilleures, leurs avantages et des exemples d'utilisation.



Pourquoi journaliser en Swift ?

Une journalisation de qualité permet :

  • De suivre le flux d'exécution et l'état des variables
  • De consigner les erreurs et exceptions avec leur contexte
  • D'analyser les performances et les goulots d'étranglement
  • De collecter des données pour le débogage en production (via des services distants)
  • De simplifier le développement en équipe et la revue de code


Solution intégrée : OSLog (os_log)

Depuis iOS 10 / macOS 10.12, Apple propose le puissant framework os_log. Il est intégré au système, prend en charge les catégories, les niveaux d'importance et le filtrage dynamique dans la console Xcode et l'application Console.

import os.log

let logger = OSLog(subsystem: "com.yourapp.networking", category: "APIClient")os_log("Requête au serveur : %{public}@", log: logger, type: .info, urlString)

// Niveaux : .debug, .info, .default, .error, .faultos_log("Erreur d'authentification : %{public}@", log: logger, type: .error, errorMessage)

Avantages : zéro dépendance, haute performance, support Apple. Inconvénients : personnalisation de sortie limitée, intégration complexe avec les services cloud.



Meilleure bibliothèque tierce : CocoaLumberjack

CocoaLumberjack est la norme de facto pour la journalisation en Swift et Objective-C. Il est plusieurs fois plus rapide que NSLog, prend en charge l'écriture asynchrone, la rotation des fichiers, plusieurs loggers simultanés et le formatage.

import CocoaLumberjack

// ConfigurationDDLog.add(DDOSLogger.sharedInstance) // Consolelet fileLogger = DDFileLogger()fileLogger.rollingFrequency = 60 * 60 * 24 // 24 heuresDDLog.add(fileLogger)

// UtilisationDDLogDebug("Débogage : \\(someValue)")DDLogInfo("Information : utilisateur connecté")DDLogWarn("Avertissement : batterie faible")DDLogError("Erreur : échec du chargement des données")

La bibliothèque est activement maintenue, possède une immense communauté et se configure facilement pour tous les besoins.



SwiftyBeaver : sortie élégante et analytique cloud

SwiftyBeaver est une solution populaire avec une sortie colorée dans la console, la prise en charge du format JSON et un service cloud intégré pour la collecte de logs en temps réel.

import SwiftyBeaver

let log = SwiftyBeaver.self

// Ajout d'une destination consolelet console = ConsoleDestination()log.addDestination(console)

// Optionnel : service cloudlet cloud = SBPlatformDestination(appID: "yourAppID", appSecret: "secret", encryptionKey: "key")log.addDestination(cloud)

log.verbose("Lancement de l'application")log.debug("Paramètres : \\(params)")log.info("Utilisateur a cliqué sur le bouton")log.warning("Délai d'attente de connexion")log.error("Erreur critique : \\(error)")

SwiftyBeaver est parfait pour les projets petits et moyens où le confort visuel pendant le développement est important.



XCGLogger : flexibilité et simplicité

XCGLogger est une bibliothèque légère avec de riches possibilités de formatage, de filtrage par balises et par niveaux. Elle prend en charge la sortie vers fichier, console et destinations personnalisées.

import XCGLogger

let log = XCGLogger.defaultlog.setup(level: .debug, showLogIdentifier: true, showFunctionName: true, showThreadName: true, showLevel: true, showFileNames: true, showLineNumbers: true)

log.debug("Débogage")log.info("Information")log.error("Erreur")

Configuration simple et API claire

Recommendations