Log Rotation: hoe het werkt, rotatiestrategieën en configuratie voor mobiele projecten

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

Log Rotation is een mechanisme voor automatisch beheer van logbestanden dat schijfoverloop voorkomt door archivering, compressie en verwijdering van oude gegevens. In mobiele applicaties hopen logs zich op op het apparaat van de gebruiker, en zonder rotatie kunnen ze binnen enkele weken gebruik gigabytes aan geheugen in beslag nemen. Volgens Redis Documentation vermindert correcte configuratie van log rotation het risico op systeemfalen door een volle schijf met 99% in vergelijking met onbeheerste loggroei. De belangrijkste rotatiestrategieën: op bestandsgrootte, op tijd en op aantal bestanden — elke wordt gekozen afhankelijk van het gebruiksscenario: logrotate in Linux, CocoaLumberjack op iOS en Timber op Android ondersteunen alle drie de benaderingen.

Belangrijkste punten

  • Log Rotation — automatische wisseling van het actieve logbestand bij het bereiken van een ingestelde drempel met archivering of verwijdering van oude bestanden
  • Rotatie op grootte — aanmaken van een nieuw bestand wanneer het huidige de limiet bereikt (typisch 10–100 MB), het oude wordt gecomprimeerd naar .gz
  • Rotatie op tijd — wisseling van bestand elke N uur of eenmaal per dag ongeacht de grootte, handig voor dagelijkse dumps
  • logrotate — standaard Linux-hulpprogramma voor automatische rotatie van systeem- en applicatielogs
  • Schijfquotum — beperking van het totale volume van alle logs op het apparaat, bij overschrijding worden de oudste bestanden verwijderd

Wat is Log Rotation

Log Rotation is het proces van periodieke vervanging van het actieve logbestand door een nieuw met gelijktijdige archivering, compressie of verwijdering van het oude. Zonder rotatie groeit één logbestand oneindig door totdat het de hele schijfpartitie vult, wat leidt tot applicatiecrashes en gegevensverlies.

Typisch scenario: de applicatie schrijft logs naar het bestand app.log. Wanneer app.log 100 MB bereikt, hernoemt het systeem het naar app.log.1, comprimeert het naar app.log.1.gz en maakt een nieuwe lege app.log aan. Bij de volgende vulling wordt app.log.1 app.log.2, app.log.1.gz wordt app.log.2.gz en oude app.log.2.gz wordt verwijderd. Dit mechanisme heet rotatie met keep count — het aantal archiefkopieën is vast.

Volgens Splunk (2023) is onjuiste rotatieconfiguratie de oorzaak van 40% van de incidenten met betrekking tot schijfvolheid op applicatieservers. Voor mobiele apparaten is rotatie nog kritischer, omdat de gebruiker logs niet handmatig kan en mag beheren.

Rotatiestrategieën voor logs

Log Rotation ondersteunt drie basisstrategieën die gecombineerd kunnen worden. De keuze van strategie hangt af van het type applicatie: serversystemen gebruiken vaker rotatie op tijd, mobiele applicaties — op grootte, ingebedde systemen — op aantal bestanden.

StrategieTriggerWanneer gebruiken
Op grootteBestand heeft N bytes bereiktHoogbelaste systemen met onvoorspelbaar logvolume
Op tijdN uur/dagen verstrekenDagelijkse dumps, compliancerichtlijnen
Op aantal bestandenN bestanden aangemaaktMobiele apparaten met beperkte schijfruimte

Rotatie op grootte — de meest voorkomende

Rotatie op grootte garandeert dat geen enkel logbestand de ingestelde limiet overschrijdt. De limiet wordt gekozen op basis van beschikbare schijfruimte en logfrequentie. Voor een server is de typische limiet 100–500 MB per bestand, voor een mobiel apparaat 1–10 MB. Als de applicatie agressief logt, moet de limiet worden verlaagd, anders vindt rotatie om de paar minuten plaats.

Rotatie op tijd — voor compliance

Rotatie op tijd is onafhankelijk van het logvolume — het bestand wordt strikt volgens schema gewisseld. Handig voor systemen waar logs een vast aantal dagen moeten worden bewaard: dagelijkse rotatie met keep count = 30 betekent 30 dagen opslag. Nadeel — één bestand kan bij intensieve belasting tot een gigabyte per dag groeien.

logrotate in Linux: configuratie en voorbeelden

logrotate is het standaard Linux-hulpprogramma voor automatische logrotatie. Het wordt gestart via cron en verwerkt configuratiebestanden uit /etc/logrotate.d/. Elke service (nginx, postgresql, applicatie) maakt zijn eigen config met paden naar logs, rotatiestrategie en acties na rotatie.

cpp
# /etc/logrotate.d/myapp — rotatie van applicatielogs
/var/log/myapp/*.log {
    daily
    rotate 7
    compress
    delaycompress
    missingok
    notifempty
    create 0640 www-data www-data
    postrotate
        kill -HUP $(cat /var/run/myapp.pid)
    endscript
}

Deze config roteert logs dagelijks, bewaart 7 archiefkopieën, comprimeert oude bestanden met gzip (behalve de laatste — delaycompress), geeft geen fout als logs ontbreken (missingok), roteert geen lege bestanden (notifempty) en hermaakt het bestand met rechten 0640. Na rotatie stuurt het een HUP-signaal naar het applicatieproces via een postrotate-script.

Parameters van logrotate

size — rotatie bij bereiken van de grootte (size 100M). rotate — aantal archiefkopieën (rotate 7). compress — gzip-compressie. dateext — toevoegen van datum aan bestandsnaam in plaats van volgnummer. sharedscripts — eenmalige uitvoering van postrotate voor alle bestanden, niet voor elk afzonderlijk. maxage — verwijdering van archieven ouder dan N dagen.

Log Rotation in mobiele applicaties

Op mobiele apparaten is Log Rotation cruciaal omdat de gebruiker het bestandssysteem niet beheert en niet verwacht dat de applicatie gigabytes aan logs in beslag neemt. iOS en Android hebben ingebouwde mechanismen: os_log op iOS gebruikt een circulaire buffer met vaste grootte (rotatie door overschrijven), Android Logcat heeft een beperkte buffer in de kernel.

Voor aangepaste bestandlogs op iOS wordt CocoaLumberjack met de klasse DDFileLogger gebruikt, die rotatie op grootte en tijd ondersteunt. Op Android — Logback of eigen implementaties via RollingFileAppender. Beide tools maken het mogelijk om de maximale bestandsgrootte en het aantal archieven in te stellen.

swift
// CocoaLumberjack — bestandsrotatie op iOS
import CocoaLumberjack

let fileLogger = DDFileLogger()
fileLogger.maximumFileSize = 1024 * 1024 // 1 MB
fileLogger.logFileManager.maximumNumberOfLogFiles = 5
DDLog.add(fileLogger)

iOS: os_log vereist geen rotatie — berichten worden overschreven in de circulaire buffer. Maar als de applicatie aangepaste bestandlogs schrijft (bijvoorbeeld voor debugging of verzending naar de server), moet rotatie handmatig worden geconfigureerd. CocoaLumberjack is de standaardkeuze voor iOS-teams, het comprimeert automatisch archieven naar .gz en verwijdert oude bestanden bij overschrijding van de limiet.

Waarom rotatie belangrijk is op Android

Android beperkt de applicatie niet in het schrijven van logs naar de eigen directory. Als een ontwikkelaar debug-logs zonder rotatie naar een bestand schrijft, kunnen deze binnen een maand actief gebruik 500 MB — 1 GB in beslag nemen. De gebruiker ontdekt het probleem wanneer het systeem een waarschuwing voor onvoldoende ruimte toont en verwijdert de applicatie. Logback met RollingFileAppender lost dit probleem op: een limiet van 5 MB met 3 archieven garandeert dat logs nooit meer dan 20 MB in beslag nemen.

Voorbeelden van rotatie-implementatie op iOS en Android

Hieronder staan voorbeelden van het configureren van logrotatie op beide platforms. Op iOS wordt CocoaLumberjack gebruikt, op Android — Logback met configuratie via XML.

kotlin
// Logback op Android — rotatieconfiguratie in logback.xml
// Bestandsgrootte 5MB, 3 archiefkopieën
@file:Suppress("unused")

// In logback.xml:
// <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
//   <file>${DATA_DIR}/logs/app.log</file>
//   <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
//     <fileNamePattern>app.%i.log.gz</fileNamePattern>
//     <minIndex>1</minIndex>
//     <maxIndex>3</maxIndex>
//   </rollingPolicy>
//   <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
//     <maxFileSize>5MB</maxFileSize>
//   </triggeringPolicy>
// </appender>

CocoaLumberjack op iOS ondersteunt niet alleen rotatie op grootte, maar ook het verwijderen van oude logs op datum via logFileManager.maximumLogFiles. Als u maximumLogFiles = 0 instelt, wordt de beperking opgeheven — logs worden oneindig verzameld, wat gevaarlijk is voor productie.

swift
// Aangepaste rotatie met controle van totaal volume
class SizeAwareLogger {
    let maxTotalSize: Int64 = 20 * 1024 * 1024

    func enforceQuota(at logDirectory: URL) {
        let files = (try? FileManager.default
            .contentsOfDirectory(
                at: logDirectory,
                includingPropertiesForKeys: [.fileSize]
            )) ?? []
        let total = files.reduce(0) {
            $0 + (try? $1.resourceValues(forKeys: [.fileSize])
                .fileSize).map(Int64.init) ?? 0
        }
        if total > maxTotalSize {
            // We verwijderen het oudste bestand
            files.sorted { $0.path < $1.path }.first.map {
                try? FileManager.default.removeItem(at: $0)
            }
        }
    }
}

Monitoring en alerts bij rotatie

Log Rotation is niet alleen automatische archivering, maar ook een indicator van de systeemgezondheid. Als logs te vaak roteren (elke paar minuten), is dit een signaal van overmatig loggen of een fout in de cyclische foutlogging (error log loop). Stel alerts in op rotatiefrequentie: meer dan 10 rotaties per uur — reden voor onderzoek.

Monitoringsystemen (Prometheus, Grafana, Datadog) kunnen rotatiemetrics volgen via bestandssystemexporteurs. Prometheus node_exporter biedt metrics van bestandsgrootte en wijzigingstijd. Op mobiele apparaten is rotatiemonitoring meestal ingebouwd in de SDK: CocoaLumberjack logt de rotatiegebeurtenis via DDLog, en Logback stuurt status via appender.

Alerts: als er meer archieven zijn dan verwacht (rotate count heeft de limiet overschreden) of het totale logvolume het quotum heeft overschreden — moet het systeem de beheerder waarschuwen. Voor servers is de standaarddrempel 80% van de partitiegrootte, voor mobiele apparaten — alert bij overschrijding van 50 MB per applicatie.

Veelgestelde vragen

Wat is de optimale bestandsgrootte voor logrotatie?

Voor servers — 100–500 MB, voor mobiele applicaties — 1–10 MB. Een te kleine limiet (minder dan 1 MB) veroorzaakt frequente rotatie en onnodige I/O-bewerkingen. Een te grote limiet (meer dan 500 MB) verhoogt de tijd voor openen en zoeken in het bestand.

Hoeveel archiefkopieën van logs moet ik bewaren?

Voor productie — minimaal 7 dagen (dagelijkse rotatie) of 3–5 archieven (rotatie op grootte). Voor compliancerichtlijnen — 30–90 dagen, maar gebruik dan een aparte opslag met compressie en bewaarbeleid, niet rotatie op dezelfde partitie.

Hoe werkt logrotate op mobiele apparaten?

logrotate is een Linux-hulpprogramma en is niet beschikbaar op iOS en Android. Op mobiele apparaten wordt rotatie geïmplementeerd door bibliotheken: CocoaLumberjack voor iOS en Logback voor Android. Ze hebben geen root-toegang nodig en werken in de sandbox-omgeving van de applicatie.

Wat te doen als logs elke minuut roteren?

Controleer op cyclisch loggen — wanneer het afhandelen van een fout zelf een nieuwe fout genereert. Voeg beveiliging toe: een teller voor herhaald loggen van hetzelfde type met een drempel (niet meer dan 100 identieke berichten per minuut) en een tijdsblokkade na overschrijding.

Is het verplicht om logarchieven te comprimeren?

Niet verplicht, maar wel aanbevolen. gzip comprimeert tekstlogs 10–20 keer zonder gegevensverlies. Op mobiele apparaten vermindert compressie de ingenomen ruimte van 50 MB tot 3–5 MB. Het enige nadeel — het archief kan niet worden gelezen zonder decomprimeren, maar voor analyse is meestal alleen het huidige bestand nodig.

Samenvatting

  • Log Rotation — automatisch beheer van logbestanden met aanmaak van nieuwe bestanden bij het bereiken van de limiet en archivering van oude om schijfoverloop te voorkomen
  • Drie strategieën — op bestandsgrootte (meest voorkomend), op tijd (voor dumps) en op aantal bestanden (voor mobiele apparaten met beperkte ruimte)
  • logrotate — standaard Linux-hulpprogramma voor serverrotatie met flexibele parameters: daily, size, compress, rotate, postrotate-scripts
  • Mobiele bibliotheken — CocoaLumberjack op iOS en Logback op Android ondersteunen rotatie op grootte met compressie en beperking van het aantal archieven
  • Schijfquotum — totale limiet voor alle logs: 20 MB voor mobiele applicaties en 80% van de partitie voor servers met alert bij overschrijding
  • Monitoring — te frequente rotatie (meer dan 10 keer per uur) wijst op cyclische foutlogging of overmatig logvolume
  • gzip-compressie — vermindert archiefvolume 10–20 keer, aanbevolen voor alle platforms, delaycompress houdt het laatste archief ongecomprimeerd voor snelle lezing

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