Introdução: Por que você precisa de logging em Swift?
Logging é uma ferramenta fundamental para desenvolvedores, permitindo rastrear o estado da aplicação, identificar erros e analisar o comportamento do usuário. No ecossistema Swift (iOS/macOS), um logging bem configurado pode economizar horas de depuração e ajudar a evitar problemas em versões de produção.
Neste artigo, abordaremos as melhores práticas de logging em Swift: desde as soluções nativas da Apple até bibliotecas de terceiros populares. Você aprenderá como não sobrecarregar a aplicação, como proteger dados sensíveis e como tornar os logs úteis para toda a equipe.
1. Ferramentas nativas: OSLog e print
1.1 Por que print() é ruim
A maneira mais simples de logging é o comando print(). No entanto, em versões de produção, não é recomendado usá-lo:
- Não há níveis de importância (info, warning, error).
- Não é possível filtrar logs no console do Xcode.
- O texto é exibido mesmo em builds de release (se não for removido manualmente).
- Não há estruturação de dados.
1.2 OSLog — o padrão da Apple
A partir do iOS 10 e macOS 10.12, a Apple recomenda usar os_log do framework os.log. Este é um mecanismo nativo que funciona de forma rápida e segura.
import os.log
let logger = Logger(subsystem: "com.example.myapp", category: "network")
func fetchData() { logger.info("Início do carregamento de dados") // ... código de carregamento logger.warning("O servidor respondeu com atraso") // ... tratamento de erro logger.error("Falha ao conectar ao servidor: \\(error.localizedDescription)")}Vantagens do OSLog:
- Desativação automática em builds de release (exceto para erros).
- Suporte a categorias e subsistemas para filtragem.
- Integração com Console.app e Xcode.
- Segurança: dados privados são automaticamente ocultados (marcador
private).
2. SwiftLog — API universal
2.1 O que é SwiftLog?
SwiftLog é uma biblioteca open-source da Apple que fornece uma interface unificada para logging. Ela é independente de plataforma e permite conectar diferentes backends (OSLog, arquivos, servidores).
2.2 Instalação e configuração
Adicione o SwiftLog via Swift Package Manager:
// Package.swiftdependencies: [ .package(url: "https://github.com/apple/swift-log.git", from: "1.5.0")]Exemplo de uso:
import Logging
let logger = Logger(label: "com.example.app")
logger.info("Aplicação iniciada")logger.warning("Bateria baixa: \\(batteryLevel)%")logger.error("Erro crítico: \\(error)")
// Configuração do nível de loggingLoggingSystem.bootstrap { label in var handler = StreamLogHandler.standardOutput(label: label) handler.logLevel = .debug return handler}Principais recursos:
- Níveis: trace, debug, info, notice, warning, error, critical.
- Metadados (quaisquer campos adicionais).
- Backend facilmente substituível (por exemplo, para envio ao Crashlytics).
- Custo zero quando o nível está desativado (mais rápido que
print).
3. Bibliotecas de terceiros: CocoaLumberjack e Pulse
3.1 CocoaLumberjack — flexibilidade e potência
Uma das bibliotecas mais populares para Objective-C e Swift. Permite escrever logs em arquivos, console, servidor remoto e até mesmo em banco de dados.
import CocoaLumberjack
// ConfiguraçãoDDLog.add(DDOSLogger.sharedInstance) // Consolelet fileLogger = DDFileLogger()fileLogger.rollingFrequency = 60 * 60 * 24 // 24 horasDDLog.add(fileLogger)
// UsoDDLogInfo("Usuário autenticado")DDLogWarn("Timeout de rede")DDLogError("