Log Rotation: cara kerja, strategi rotasi, dan konfigurasi untuk proyek mobile

Penulis: IT Sectr Diterbitkan: 2026-05-28 Waktu membaca: 8 mnt

Log Rotation adalah mekanisme manajemen otomatis file log yang mencegah kepenuhan disk melalui pengarsipan, kompresi, dan penghapusan catatan lama. Dalam aplikasi mobile, log menumpuk di perangkat pengguna, dan tanpa rotasi dapat memakan gigabyte memori dalam beberapa minggu penggunaan. Menurut Redis Documentation, konfigurasi log rotation yang benar mengurangi risiko kegagalan sistem karena disk penuh sebesar 99% dibandingkan dengan pertumbuhan log yang tidak terkendali. Strategi rotasi utama: berdasarkan ukuran file, berdasarkan waktu, dan berdasarkan jumlah file — masing-masing dipilih tergantung pada skenario penggunaan: logrotate di Linux, CocoaLumberjack di iOS, dan Timber di Android mendukung ketiga pendekatan tersebut.

Poin Utama

  • Log Rotation — pergantian otomatis file log aktif saat mencapai ambang batas yang ditentukan dengan pengarsipan atau penghapusan file lama
  • Rotasi berdasarkan ukuran — pembuatan file baru ketika file saat ini mencapai batas (biasanya 10–100 MB), file lama dikompresi menjadi .gz
  • Rotasi berdasarkan waktu — pergantian file setiap N jam atau sekali sehari terlepas dari ukuran, nyaman untuk dump harian
  • logrotate — utilitas Linux standar untuk rotasi otomatis log sistem dan aplikasi
  • Kuota disk — pembatasan volume total semua log di perangkat, setelah melampauinya file tertua akan dihapus

Apa itu Log Rotation

Log Rotation adalah proses pergantian periodik file log aktif ke file baru dengan pengarsipan, kompresi, atau penghapusan file lama secara bersamaan. Tanpa rotasi, satu file log akan tumbuh tanpa batas hingga memenuhi seluruh partisi disk, yang menyebabkan kegagalan aplikasi dan kehilangan data.

Skenario tipikal: aplikasi menulis log ke file app.log. Ketika app.log mencapai 100 MB, sistem mengganti namanya menjadi app.log.1, mengompresinya menjadi app.log.1.gz, dan membuat app.log baru yang kosong. Pada pengisian berikutnya, app.log.1 menjadi app.log.2, app.log.1.gz menjadi app.log.2.gz, dan app.log.2.gz lama dihapus. Mekanisme ini disebut rotasi dengan keep count — jumlah salinan arsip tetap.

Menurut Splunk (2023), konfigurasi rotasi yang salah adalah penyebab 40% insiden terkait kepenuhan disk di server aplikasi. Untuk perangkat mobile, rotasi bahkan lebih kritis karena pengguna tidak dapat dan tidak boleh mengelola log secara manual.

Strategi rotasi log

Log Rotation mendukung tiga strategi dasar yang dapat dikombinasikan. Pemilihan strategi tergantung pada jenis aplikasi: sistem server lebih sering menggunakan rotasi berdasarkan waktu, aplikasi mobile — berdasarkan ukuran, sistem tertanam — berdasarkan jumlah file.

StrategiPemicuKapan digunakan
Berdasarkan ukuranFile mencapai N byteSistem dengan beban tinggi dan volume log yang tidak dapat diprediksi
Berdasarkan waktuN jam/hari berlaluDump harian, persyaratan kepatuhan
Berdasarkan jumlah fileN file telah dibuatPerangkat mobile dengan ruang disk terbatas

Rotasi berdasarkan ukuran — yang paling umum

Rotasi berdasarkan ukuran menjamin bahwa tidak ada file log yang melebihi batas yang ditentukan. Batas dipilih berdasarkan ruang disk yang tersedia dan frekuensi logging. Untuk server, batas tipikal adalah 100–500 MB per file, untuk perangkat mobile — 1–10 MB. Jika aplikasi melakukan logging secara agresif, batas harus diturunkan, jika tidak rotasi akan terjadi setiap beberapa menit.

Rotasi berdasarkan waktu — untuk kepatuhan

Rotasi berdasarkan waktu tidak tergantung pada volume log — file berubah secara ketat sesuai jadwal. Nyaman untuk sistem di mana log harus disimpan dalam jumlah hari tetap: rotasi harian dengan keep count = 30 berarti penyimpanan 30 hari. Kekurangannya — satu file dapat tumbuh hingga satu gigabyte per hari di bawah beban intensif.

logrotate di Linux: konfigurasi dan contoh

logrotate adalah utilitas Linux standar untuk rotasi log otomatis. Ini dijalankan melalui cron dan memproses file konfigurasi dari /etc/logrotate.d/. Setiap layanan (nginx, postgresql, aplikasi) membuat konfigurasinya sendiri dengan jalur ke log, strategi rotasi, dan tindakan pasca-rotasi.

cpp
# /etc/logrotate.d/myapp — rotasi log aplikasi
/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
}

Konfigurasi ini merotasi log setiap hari, menyimpan 7 salinan arsip, mengompresi file lama dengan gzip (kecuali yang terakhir — delaycompress), tidak memberikan error jika log tidak ada (missingok), tidak merotasi file kosong (notifempty), dan membuat ulang file dengan hak akses 0640. Setelah rotasi, mengirim sinyal HUP ke proses aplikasi melalui skrip postrotate.

Parameter logrotate

size — rotasi saat mencapai ukuran (size 100M). rotate — jumlah salinan arsip (rotate 7). compress — kompresi gzip. dateext — penambahan tanggal ke nama file sebagai pengganti nomor urut. sharedscripts — eksekusi postrotate satu kali untuk semua file, bukan untuk masing-masing secara terpisah. maxage — penghapusan arsip yang lebih lama dari N hari.

Log Rotation di aplikasi mobile

Di perangkat mobile, Log Rotation sangat penting karena pengguna tidak mengelola sistem file dan tidak mengharapkan aplikasi memakan gigabyte untuk log. iOS dan Android memiliki mekanisme bawaan: os_log di iOS menggunakan buffer melingkar berukuran tetap (rotasi dengan penimpaan), Android Logcat memiliki buffer terbatas di kernel.

Untuk file log kustom di iOS digunakan CocoaLumberjack dengan kelas DDFileLogger, yang mendukung rotasi berdasarkan ukuran dan waktu. Di Android — Logback atau implementasi sendiri melalui RollingFileAppender. Kedua alat memungkinkan pengaturan ukuran file maksimum dan jumlah arsip.

swift
// CocoaLumberjack — rotasi file di iOS
import CocoaLumberjack

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

iOS: os_log tidak memerlukan rotasi — pesan ditimpa di buffer melingkar. Tetapi jika aplikasi menulis file log kustom (misalnya, untuk debugging atau pengiriman ke server), rotasi harus dikonfigurasi secara manual. CocoaLumberjack adalah pilihan standar untuk tim iOS, secara otomatis mengompresi arsip ke .gz dan menghapus file lama saat melampaui batas.

Mengapa rotasi penting di Android

Android tidak membatasi aplikasi dalam menulis log ke direktori sendiri. Jika pengembang menulis log debug ke file tanpa rotasi, dalam sebulan penggunaan aktif dapat memakan 500 MB — 1 GB. Pengguna akan menemukan masalah ketika sistem menampilkan peringatan ruang tidak mencukupi dan akan menghapus aplikasi. Logback dengan RollingFileAppender memecahkan masalah ini: batas 5 MB dengan 3 arsip menjamin bahwa log tidak akan pernah memakan lebih dari 20 MB.

Contoh implementasi rotasi di iOS dan Android

Di bawah ini adalah contoh konfigurasi rotasi log di kedua platform. Di iOS digunakan CocoaLumberjack, di Android — Logback dengan konfigurasi melalui XML.

kotlin
// Logback di Android — konfigurasi rotasi di logback.xml
// Ukuran file 5MB, 3 salinan arsip
@file:Suppress("unused")

// Di 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 di iOS mendukung tidak hanya rotasi berdasarkan ukuran, tetapi juga penghapusan log lama berdasarkan tanggal dengan logFileManager.maximumLogFiles. Jika Anda mengatur maximumLogFiles = 0, batasan dihapus — log akan menumpuk tanpa batas, yang berbahaya untuk production.

swift
// Rotasi kustom dengan pemeriksaan volume total
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 {
            // Kami menghapus file tertua
            files.sorted { $0.path < $1.path }.first.map {
                try? FileManager.default.removeItem(at: $0)
            }
        }
    }
}

Monitoring dan alert saat rotasi

Log Rotation tidak hanya pengarsipan otomatis, tetapi juga indikator kesehatan sistem. Jika log terlalu sering berotasi (setiap beberapa menit), ini adalah sinyal logging berlebihan atau kesalahan dalam logging siklikal (error log loop). Konfigurasikan alert pada frekuensi rotasi: lebih dari 10 rotasi per jam — alasan untuk diperiksa.

Sistem monitoring (Prometheus, Grafana, Datadog) dapat melacak metrik rotasi melalui eksportir sistem file. Prometheus node_exporter menyediakan metrik ukuran file dan waktu modifikasinya. Di perangkat mobile, monitoring rotasi biasanya terintegrasi dalam SDK: CocoaLumberjack mencatat peristiwa rotasi melalui DDLog, dan Logback mengirim status melalui appender.

Alert: jika arsip lebih banyak dari yang diharapkan (rotate count melampaui batas) atau volume total log melampaui kuota — sistem harus memberi tahu administrator. Untuk server, ambang standar adalah 80% dari ukuran partisi, untuk perangkat mobile — alert saat melampaui 50 MB per aplikasi.

Pertanyaan yang Sering Diajukan

Berapa ukuran file log yang optimal untuk rotasi?

Untuk server — 100–500 MB, untuk aplikasi mobile — 1–10 MB. Batas terlalu kecil (kurang dari 1 MB) menyebabkan rotasi sering dan operasi I/O yang tidak perlu. Batas terlalu besar (lebih dari 500 MB) meningkatkan waktu pembukaan dan pencarian di file.

Berapa banyak salinan arsip log yang harus disimpan?

Untuk production — minimal 7 hari (rotasi harian) atau 3–5 arsip (rotasi berdasarkan ukuran). Untuk persyaratan kepatuhan — 30–90 hari, tetapi gunakan penyimpanan terpisah dengan kompresi dan kebijakan retensi, bukan rotasi di partisi yang sama.

Bagaimana cara kerja logrotate di perangkat mobile?

logrotate adalah utilitas Linux, tidak tersedia di iOS dan Android. Di perangkat mobile, rotasi diimplementasikan oleh pustaka: CocoaLumberjack untuk iOS dan Logback untuk Android. Mereka tidak memerlukan akses root dan bekerja di lingkungan sandbox aplikasi.

Apa yang harus dilakukan jika log berotasi setiap menit?

Periksa apakah ada logging siklikal — ketika penanganan kesalahan itu sendiri menghasilkan kesalahan baru. Tambahkan perlindungan: penghitung pengulangan logging dari tipe yang sama dengan ambang batas (tidak lebih dari 100 pesan identik per menit) dan pemblokiran waktu setelah melampaui batas.

Apakah wajib mengompresi arsip log?

Tidak wajib, tetapi disarankan. gzip mengompresi log teks 10–20 kali tanpa kehilangan data. Di perangkat mobile, kompresi mengurangi ruang yang digunakan dari 50 MB menjadi 3–5 MB. Satu-satunya kelemahan — arsip tidak dapat dibaca tanpa dekompresi, tetapi untuk analisis biasanya hanya file saat ini yang diperlukan.

Kesimpulan

  • Log Rotation — manajemen otomatis file log dengan pembuatan file baru saat mencapai batas dan pengarsipan file lama untuk mencegah kepenuhan disk
  • Tiga strategi — berdasarkan ukuran file (paling umum), berdasarkan waktu (untuk dump), dan berdasarkan jumlah file (untuk perangkat mobile dengan ruang terbatas)
  • logrotate — utilitas Linux standar untuk rotasi server dengan parameter fleksibel: daily, size, compress, rotate, skrip postrotate
  • Pustaka mobile — CocoaLumberjack di iOS dan Logback di Android mendukung rotasi berdasarkan ukuran dengan kompresi dan pembatasan jumlah arsip
  • Kuota disk — batas total untuk semua log: 20 MB untuk aplikasi mobile dan 80% dari partisi untuk server dengan alert saat melampaui
  • Monitoring — rotasi terlalu sering (lebih dari 10 kali per jam) menandakan logging siklikal kesalahan atau volume log berlebihan
  • Kompresi gzip — mengurangi volume arsip 10–20 kali, disarankan untuk semua platform, delaycompress menyisakan arsip terakhir tidak terkompresi untuk pembacaan cepat

Kami akan mengembangkan aplikasi seluler turnkey

IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.

Diskusikan proyek

Baca juga