Remote Logging — wat is het, verzameltools en methoden voor externe loganalyse

Auteur: IT Sectr Gepubliceerd: 2026-05-28 Leestijd: 8 min

Remote Logging is het mechanisme voor het verzenden van logs van een mobiel apparaat naar een externe server voor gecentraliseerde analyse en monitoring. In tegenstelling tot lokaal loggen, dat gegevens op het apparaat opslaat, maakt externe verzameling het mogelijk om fouten en afwijkingen van alle gebruikersapparaten in realtime te zien. Volgens de Sentry Resource Library vinden apps met remote logging 92% van de productiefouten binnen het eerste uur na release, tegenover 15% bij alleen crashrapporten. Dit is een verplicht hulpmiddel voor elk mobiel ontwikkelteam: Firebase Crashlytics, Sentry en Datadog bieden kant-en-klare SDK's voor iOS en Android.

Belangrijkste punten

  • Remote Logging — verzenden van logs van apparaat naar server voor gecentraliseerde monitoring en analyse van productiefouten
  • Firebase Crashlytics — Google's gratis service voor het verzamelen van crashes en aangepaste logs op Android en iOS
  • Sentry — platform voor foutmonitoring met ondersteuning voor breadcrumbs, gebruikerscontext en distributed tracing
  • Logcat — het standaard Android-logsysteem, extern toegankelijk via ADB en Android Studio
  • Batching — groeperen van logs op het apparaat en in batches verzenden om batterij en dataverkeer te besparen

Wat is Remote Logging

Remote Logging is het proces van het verzamelen van logs van externe apparaten en het verzenden ervan naar een centrale server voor analyse. In de context van mobiele ontwikkeling omvat remote logging niet alleen crashrapporten (crash reporting), maar ook aangepaste gebeurtenissen, breadcrumbs, prestatiedata en gebruikersscenario's.

Het belangrijkste verschil tussen remote logging en crash reporting is proactiviteit. Crash reporting verzamelt alleen gegevens over crashes die al hebben plaatsgevonden. Remote logging verzamelt de reeks gebeurtenissen voor de crash: welke schermen de gebruiker heeft geopend, welke verzoeken hij heeft gedaan, welke gegevens hij heeft ingevoerd. Dit maakt het mogelijk om het foutscenario te reproduceren zonder contact met de gebruiker.

Apple biedt een ingebouwd mechanisme voor extern loggen via .logarchive, maar voor productie-apps worden bijna altijd externe services gebruikt. Android SDK bevat Logcat, dat extern toegankelijk is via ADB, maar niet voor apparaten van eindgebruikers zonder foutopsporingsmodus.

Architectuur van extern loggen

De architectuur van remote logging bestaat uit drie componenten: de client-SDK op het apparaat die logs verzamelt en buffert, het transportprotocol voor het verzenden van gegevens en de server voor opslag en visualisatie.

ComponentRolVoorbeelden
Client SDKVerzamelen, bufferen, batchingFirebase SDK, Sentry Cocoa, Timber
TransportGegevensoverdracht via HTTPSREST, gRPC, WebSocket
ServerOpslag, indexering, alertsSentry, Crashlytics, Datadog

De client-SDK buffert logs in het RAM-geheugen en stuurt ze periodiek in batches naar de server. Als het apparaat offline is, worden de logs in een lokaal bestand opgeslagen en bij de volgende netwerkverbinding verzonden. De buffergrootte en het verzendinterval zijn configureerbaar: typische waarden zijn 50 gebeurtenissen of 30 seconden.

Transportprotocollen

HTTPS REST — het meest gebruikte protocol voor remote logging. De SDK serialiseert logs naar JSON en verzendt ze via POST-verzoeken naar het server-endpoint. gRPC — een alternatief met binaire serialisatie (Protocol Buffers), dat 30–40% compacter is dan JSON en sneller op mobiele apparaten met een onstabiele verbinding. WebSocket wordt gebruikt voor realtime loggen tijdens debugging, maar zelden in productie vanwege het energieverbruik.

Firebase Crashlytics: crashes en logs verzamelen

Firebase Crashlytics — Google's gratis service voor het verzamelen van crashrapporten en aangepaste logs. Het is ingebouwd in de Firebase SDK en vereist geen aparte server. Crashlytics verzamelt automatisch stack traces, apparaatstatus, OS-versie en geopende schermen op het moment van de crash.

Aangepaste logs in Crashlytics worden toegevoegd via de methode log() — ze worden niet onmiddellijk naar de server verzonden, maar opgeslagen in een ringbuffer en toegevoegd aan het volgende crashrapport. Dit is het belangrijkste verschil met Sentry, waar elke log een afzonderlijke gebeurtenis is. Het maximale volume aan aangepaste logs in Crashlytics is 64 KB per crash.

kotlin
// Firebase Crashlytics — aangepaste logs op Android
import com.google.firebase.crashlytics.FirebaseCrashlytics

class CheckoutViewModel {
    fun processPayment(amount: Double) {
        FirebaseCrashlytics.getInstance()
            .log("Payment started: amount=$amount")
        try {
            process(amount)
        } catch (e: Exception) {
            FirebaseCrashlytics.getInstance()
                .recordException(e)
        }
    }
}

Firebase Crashlytics ondersteunt setUserIdentifier om crashes aan specifieke gebruikers te koppelen. Dit helpt om te bepalen of een bug massaal is of slechts één gebruiker treft. setCustomKey voegt willekeurige sleutels toe aan elk rapport — A/B-testversie, regio, tariefplan.

Sentry: breadcrumbs en gebruikerscontext

Sentry — een platform voor foutmonitoring dat niet alleen crashrapporten opslaat, maar ook alle aangepaste gebeurtenissen (breadcrumbs) als onafhankelijke records. In tegenstelling tot Crashlytics, maakt Sentry het mogelijk om de reeks gebeurtenissen voor een fout in chronologische volgorde te bekijken — breadcrumbs zijn zichtbaar in de interface zonder ze te hoeven reconstrueren uit het crashlog.

Automatische breadcrumbs in Sentry

Sentry SDK verzamelt automatisch breadcrumbs voor systeemgebeurtenissen: wijzigingen in de levenscyclus van UIViewController (viewDidLoad, viewWillAppear), touches, knopklikken, HTTP-verzoeken via URLSession. Al deze gebeurtenissen worden weergegeven op de fouttijdlijn samen met aangepaste breadcrumbs. Voor Android worden op dezelfde manier Activity- en Fragment-levenscyclus, onClick-gebeurtenissen en netwerkverzoeken via OkHttp verzameld.

Sentry SDK voor iOS en Android verzamelt automatisch breadcrumbs van UI-gebeurtenissen: touches, navigatie, levenscyclus. Ontwikkelaars kunnen aangepaste breadcrumbs toevoegen via addBreadcrumb() met specificatie van type, categorie en niveau. Sentry ondersteunt distributed tracing: de logger koppelt breadcrumbs op de client aan backend-verzoeken via trace-ID.

swift
import Sentry

func trackCartEvent(action: String, itemId: String) {
    let crumb = Breadcrumb()
    crumb.level = .info
    crumb.category = "cart"
    crumb.message = "Cart \(action): \(itemId)"
    crumb.data = ["action": action, "item_id": itemId]
    SentrySDK.addBreadcrumb(crumb)
}

Logcat en externe toegang via ADB

Logcat — het standaard Android-logsysteem, toegankelijk via Android Debug Bridge (ADB). Logcat verzamelt alle systeem- en applicatiemeldingen, ingedeeld per niveau (V, D, I, W, E, F) en tags. Externe toegang tot Logcat werkt via ADB via USB of Wi-Fi, maar alleen voor apparaten in foutopsporingsmodus — productie-apps op apparaten zonder USB-verbinding zijn niet toegankelijk.

Voor extern loggen in productie op Android worden alternatieven gebruikt: Logcat kan zelf geen logs naar de server sturen. Zijn rol is lokale diagnostiek. Maar er zijn wrappers (Timber, LogcatLive) die berichten doorsturen naar Firebase of Sentry, terwijl de vertrouwde Log.d / Log.e API behouden blijft. Timber maakt het mogelijk om handlers te wisselen zonder de applicatiecode te wijzigen — de debug-boom schrijft naar Logcat, de release-boom stuurt met batching en compressie naar de server.

Batching en verkeersoptimalisatie

Batching — het groeperen van meerdere logs in één HTTP-verzoek om dataverkeer en batterij te besparen. In plaats van 50 afzonderlijke POST-verzoeken stuurt de SDK één JSON-array. Typische strategieën: verzenden op schema (elke 30 seconden), op aantal (elke 50 gebeurtenissen) of op gebeurtenis (alleen bij kritieke fout).

Voor apps met miljoenen gebruikers kan het logvolume terabytes per dag bereiken. Batching vermindert het aantal verzoeken met 10–50 keer en verlaagt de serverbelasting. Sentry gebruikt gzip-compressie op transportniveau, wat het gegevensvolume nog eens met 60–70% vermindert.

kotlin
// Eenvoudige implementatie van batching op Android
class LogBatcher {
    private val buffer = mutableListOf<LogEvent>()
    private val maxSize = 50
    private val intervalMs = 30_000L

    fun append(event: LogEvent) {
        buffer.add(event)
        if (buffer.size >= maxSize) flush()
    }

    suspend fun flush() {
        val batch = buffer.toList()
        buffer.clear()
        sendToServer(batch)
    }
}

Compressie en deduplicatie

gzip — de standaard compressiemethode voor HTTP-logoverdracht. Sentry en Crashlytics SDK's comprimeren automatisch de verzoekbody voor verzending. Deduplicatie — het verwijderen van dubbele berichten aan de clientzijde: als dezelfde gebeurtenis 100 keer per seconde wordt opgevangen, stuurt de SDK deze één keer met het veld count = 100.

Veelvoorkomende fouten bij extern loggen

De meest voorkomende fout — het loggen van gevoelige gegevens. Remote logging SDK verzendt gegevens naar de server, en als een ontwikkelaar per ongeluk een wachtwoord, token of e-mail van de gebruiker logt, komen deze gegevens in de cloudinfrastructuur terecht. Gebruik altijd PII-filtering (Persoonlijk Identificeerbare Informatie) op SDK-niveau: Sentry heeft een ingebouwde beforeSend-hook voor het opschonen van gegevens vóór verzending.

Het tweede veelvoorkomende probleem — overmatig loggen. Als elke vingerbeweging naar de server wordt gestuurd, groeit het gegevensvolume exponentieel en stijgen de serverkosten eveneens. Stel een budget in voor logs: niet meer dan 1–5 gebeurtenissen per gebruiker per minuut in productie. Debug-logs verzend uitsluitend met een vlag die voor specifieke apparaten wordt ingeschakeld.

De derde fout — het negeren van het offline-scenario. Als de SDK logs verliest bij gebrek aan netwerk en ze niet herstelt bij hernieuwde verbinding, is remote logging nutteloos voor gebruikers met een onstabiele verbinding. Alle SDK's (Firebase, Sentry) cachen logs automatisch in een lokaal bestand en verzenden ze wanneer het netwerk beschikbaar komt, maar deze instelling moet worden gecontroleerd.

Veelgestelde vragen

Hoe verschilt Remote Logging van crash reporting?

Crash reporting verzamelt alleen informatie over applicatiecrashes. Remote Logging verzamelt alle gebeurtenissen: aangepaste logs, breadcrumbs, prestatiedata, UI-gebeurtenissen. Crash reporting is een subset van remote logging, geen alternatief.

Welke service kiezen: Firebase Crashlytics of Sentry?

Crashlytics is gratis en voldoende voor basiscrashrapporten. Sentry is beter als u breadcrumbs, distributed tracing, aangepaste dashboards en flexibele alerts nodig hebt. Voor enterprise-projecten met compliance-eisen is Sentry beschikbaar in een self-hosted versie.

Hoe voorkom ik het loggen van overbodige gegevens in productie?

Gebruik logniveaus: stuur debug/info-logs alleen vanaf het ontwikkelaarsapparaat via de isDebuggable-vlag. Filter de overige niveaus (warn, error) via de beforeSend-hook en verwijder velden die PII bevatten. Stel de maximale loggrootte per sessie in.

Kan Logcat worden gebruikt voor extern loggen?

Logcat ondersteunt geen externe verzending naar een server. Gebruik voor remote logging op Android Timber voor doorsturen naar Firebase of Sentry, en laat Logcat voor debugging via USB. Timber vervangt de Android Log API en voegt plantbare bomen toe.

Hoeveel logs kunnen worden verzonden zonder de batterij te belasten?

Tot 50 gebeurtenissen per minuut per apparaat heeft geen merkbare invloed op het batterijverbruik, als batching wordt gebruikt (verzenden in batches, niet individueel). Bij 200+ gebeurtenissen per minuut zal Wi-Fi/modem constant actief zijn — de batterij raakt 15–25% sneller leeg.

Samenvatting

  • Remote Logging — verzenden van logs van mobiel apparaat naar server voor gecentraliseerde analyse, inclusief crashrapporten, breadcrumbs en prestatiedata
  • Firebase Crashlytics — Google's gratis service met aangepaste logs in ringbuffer, gekoppeld aan crashrapporten
  • Sentry — platform met onafhankelijke breadcrumbs en distributed tracing, waarmee de reeks gebeurtenissen voor een fout kan worden bekeken zonder reconstructie uit crashlog
  • Batching — groeperen van 50+ gebeurtenissen in één verzoek met gzip-compressie, vermindert dataverkeer en serverbelasting met 10–50 keer
  • PII-filtering — verplichte opschoning van gevoelige gegevens via beforeSend-hooks om lekkage van persoonlijke gegevens naar de server te voorkomen
  • Logbudget — niet meer dan 1–5 gebeurtenissen per gebruiker per minuut in productie, debug-logs alleen met isDebuggable-vlag op specifieke apparaten

We ontwikkelen een mobiele applicatie turnkey

IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.

Bespreek het project

Lees ook