Log Rotation: nasıl çalışır, döndürme stratejileri ve mobil projeler için yapılandırma

Yazar: IT Sectr Yayınlanma: 2026-05-28 Okuma süresi: 8 dk

Log Rotation, arşivleme, sıkıştırma ve eski kayıtların silinmesi yoluyla disk taşmasını önleyen otomatik bir log dosyası yönetim mekanizmasıdır. Mobil uygulamalarda, loglar kullanıcının cihazında birikir ve döndürme olmadan kullanımın birkaç haftası içinde gigabaytlarca bellek kaplayabilirler. Redis Dokümantasyonu'na göre, doğru log rotation yapılandırması, kontrolsüz log büyümesine kıyasla disk dolması nedeniyle sistem arızası riskini %99 oranında azaltır. Ana döndürme stratejileri şunlardır: dosya boyutuna göre, zamana göre ve dosya sayısına göre — her biri kullanım senaryosuna bağlı olarak seçilir: Linux'ta logrotate, iOS'ta CocoaLumberjack ve Android'de Timber her üç yaklaşımı da destekler.

Önemli Noktalar

  • Log Rotation — belirlenen eşiğe ulaşıldığında aktif log dosyasının otomatik değiştirilmesi, eski dosyaların arşivlenmesi veya silinmesi
  • Boyut tabanlı döndürme — mevcut dosya sınıra ulaştığında (tipik olarak 10–100 MB) yeni dosya oluşturur, eskisi .gz olarak sıkıştırılır
  • Zaman tabanlı döndürme — boyuttan bağımsız olarak her N saatte bir veya günde bir kez dosya değişimi, günlük dökümler için uygun
  • logrotate — sistem ve uygulama loglarının otomatik döndürülmesi için standart Linux yardımcı programı
  • Disk kotası — cihazdaki tüm logların toplam hacmini sınırlar, aşıldığında en eski dosyalar silinir

Log Rotation Nedir

Log Rotation, aktif log dosyasının periyodik olarak yenisiyle değiştirilmesi ve aynı anda eskisinin arşivlenmesi, sıkıştırılması veya silinmesi sürecidir. Döndürme olmadan, tek bir log dosyası tüm disk bölümünü doldurana kadar süresiz olarak büyür ve uygulama hatasına ve veri kaybına yol açar.

Tipik senaryo: bir uygulama app.log dosyasına log yazar. app.log 100 MB'a ulaştığında, sistem onu app.log.1 olarak yeniden adlandırır, app.log.1.gz olarak sıkıştırır ve yeni boş bir app.log oluşturur. Bir sonraki dolumda, app.log.1 app.log.2 olur, app.log.1.gz app.log.2.gz olur ve eski app.log.2.gz silinir. Bu mekanizmaya keep count ile döndürme denir — arşiv kopya sayısı sabittir.

Splunk'a (2023) göre, yanlış döndürme yapılandırması, uygulama sunucularında disk alanı tükenmesiyle ilgili olayların %40'ının nedenidir. Mobil cihazlar için döndürme daha da kritiktir çünkü kullanıcı logları manuel olarak yönetemez ve yönetmemelidir.

Log Döndürme Stratejileri

Log Rotation birleştirilebilen üç temel stratejiyi destekler. Strateji seçimi uygulama türüne bağlıdır: sunucu sistemleri daha çok zaman tabanlı döndürme kullanır, mobil — boyut tabanlı, gömülü sistemler — dosya sayısı tabanlı.

StratejiTetikleyiciNe zaman kullanılır
Boyuta göreDosya N bayta ulaştıTahmin edilemeyen log hacmine sahip yüksek yük sistemleri
Zamana göreN saat/gün geçtiGünlük dökümler, uyumluluk gereksinimleri
Dosya sayısına göreN dosya oluşturulduSınırlı disk alanına sahip mobil cihazlar

Boyut tabanlı döndürme — en yaygın

Boyut tabanlı döndürme, hiçbir log dosyasının belirlenen sınırı aşmamasını sağlar. Sınır, mevcut disk alanı ve loglama sıklığına göre seçilir. Bir sunucu için tipik sınır dosya başına 100–500 MB, mobil cihaz için — 1–10 MB'dir. Uygulama agresif bir şekilde log tutuyorsa, sınır düşürülmelidir, aksi halde döndürme her birkaç dakikada bir gerçekleşir.

Zaman tabanlı döndürme — uyumluluk için

Zaman tabanlı döndürme log hacminden bağımsızdır — dosya kesinlikle bir programa göre değiştirilir. Logların sabit sayıda gün saklanması gereken sistemler için uygundur: keep count = 30 ile günlük döndürme, 30 günlük depolama anlamına gelir. Dezavantajı — yoğun yük altında tek bir dosya günde bir gigabayta kadar büyüyebilir.

Linux'ta logrotate: Yapılandırma ve Örnekler

logrotate, otomatik log döndürme için standart Linux yardımcı programıdır. Cron aracılığıyla çalışır ve /etc/logrotate.d/ dizinindeki yapılandırma dosyalarını işler. Her hizmet (nginx, postgresql, uygulama), log yollarını, döndürme stratejisini ve döndürme sonrası eylemleri belirten kendi yapılandırmasını oluşturur.

cpp
# /etc/logrotate.d/myapp — uygulama log döndürme
/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
}

Bu yapılandırma logları günlük olarak döndürür, 7 arşiv kopyası tutar, eski dosyaları gzip ile sıkıştırır (sonuncusu hariç — delaycompress), loglar eksikse hata vermez (missingok), boş dosyaları döndürmez (notifempty) ve dosyayı 0640 izinleriyle yeniden oluşturur. Döndürmeden sonra, bir postrotate betiği aracılığıyla uygulama sürecine HUP sinyali gönderir.

logrotate Parametreleri

size — bir boyuta ulaşıldığında döndürme (size 100M). rotate — arşiv kopyası sayısı (rotate 7). compress — gzip sıkıştırma. dateext — sıra numarası yerine dosya adına tarih ekler. sharedscripts — postrotate'i her dosya için ayrı ayrı değil, tüm dosyalar için bir kez çalıştırır. maxage — N günden daha eski arşivleri siler.

Mobil Uygulamalarda Log Rotation

Mobil cihazlarda, Log Rotation kritiktir çünkü kullanıcı dosya sistemini yönetmez ve uygulamanın loglarla gigabayt kaplamasını beklemez. iOS ve Android'de yerleşik mekanizmalar vardır: iOS'ta os_log sabit boyutlu bir halka tampon kullanır (üzerine yazma ile döndürme), Android Logcat çekirdekte sınırlı bir tampona sahiptir.

iOS'ta özel dosya logları için, boyut ve zaman tabanlı döndürmeyi destekleyen DDFileLogger sınıfıyla CocoaLumberjack kullanılır. Android'de — Logback veya RollingFileAppender aracılığıyla özel uygulamalar. Her iki araç da maksimum dosya boyutu ve arşiv sayısını ayarlamaya izin verir.

swift
// CocoaLumberjack — iOS'ta dosya döndürme
import CocoaLumberjack

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

iOS: os_log döndürme gerektirmez — mesajlar halka tamponda üzerine yazılır. Ancak uygulama özel dosya logları yazıyorsa (hata ayıklama veya sunucuya gönderme için), döndürme manuel olarak yapılandırılmalıdır. CocoaLumberjack, iOS ekipleri için standart seçimdir — arşivleri otomatik olarak .gz'ye sıkıştırır ve sınır aşıldığında eski dosyaları siler.

Android'de Döndürme Neden Önemlidir

Android, uygulamaların kendi dizinlerine log yazmasını kısıtlamaz. Bir geliştirici döndürme olmadan bir dosyaya hata ayıklama logları yazarsa, aktif kullanımın bir ayı içinde 500 MB ile 1 GB arasında yer kaplayabilir. Kullanıcı, sistem yetersiz depolama uyarısı gösterdiğinde sorunu keşfedecek ve uygulamayı silecektir. RollingFileAppender ile Logback bu sorunu çözer: 3 arşivle 5 MB sınırı, logların asla 20 MB'ı aşmamasını garanti eder.

iOS ve Android'de Döndürme Uygulama Örnekleri

Aşağıda her iki platformda log döndürme yapılandırması örnekleri verilmiştir. iOS'ta CocoaLumberjack, Android'de — XML yapılandırmasıyla Logback kullanılır.

kotlin
// Android'de Logback — logback.xml'de döndürme yapılandırması
// Dosya boyutu 5MB, 3 arşiv kopyası
@file:Suppress("unused")

// logback.xml içinde:
// <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>

iOS'ta CocoaLumberjack yalnızca boyut tabanlı döndürmeyi değil, aynı zamanda logFileManager.maximumLogFiles kullanarak tarihe göre eski logların silinmesini de destekler. maximumLogFiles = 0 olarak ayarlanırsa sınır kaldırılır — loglar süresiz olarak birikir ve bu üretim için tehlikelidir.

swift
// Toplam hacim kontrolü ile özel döndürme
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 {
            // En eski dosyayı sil
            files.sorted { $0.path < $1.path }.first.map {
                try? FileManager.default.removeItem(at: $0)
            }
        }
    }
}

Döndürmede İzleme ve Uyarılar

Log Rotation yalnızca otomatik arşivleme değil, aynı zamanda sistem sağlığının bir göstergesidir. Loglar çok sık döndürülüyorsa (her birkaç dakikada bir), bu aşırı loglama veya hata log döngüsü sinyalidir. Döndürme sıklığına uyarılar ayarlayın: saatte 10'dan fazla döndürme inceleme nedenidir.

İzleme sistemleri (Prometheus, Grafana, Datadog), dosya sistemi dışa aktarıcıları aracılığıyla döndürme metriklerini izleyebilir. Prometheus node_exporter, dosya boyutu ve değişiklik zamanı metriklerini sağlar. Mobil cihazlarda, döndürme izlemesi genellikle SDK'ya yerleşiktir: CocoaLumberjack döndürme olayını DDLog aracılığıyla kaydeder ve Logback bir appender aracılığıyla durum gönderir.

Uyarılar: beklenenden daha fazla arşiv varsa (döndürme sayısı sınırı aştı) veya toplam log hacmi kotayı aştıysa — sistem yöneticiyi bilgilendirmelidir. Sunucular için standart eşik bölüm boyutunun %80'idir; mobil cihazlar için — uygulama başına 50 MB aşıldığında uyarı.

Sıkça Sorulan Sorular

Döndürme için en uygun log dosyası boyutu nedir?

Sunucular için — 100–500 MB, mobil uygulamalar için — 1–10 MB. Çok küçük sınır (1 MB'ın altı) sık döndürmeye ve gereksiz G/Ç işlemlerine neden olur. Çok büyük sınır (500 MB'ın üzeri) dosyayı açma ve arama süresini artırır.

Kaç tane arşiv log kopyası saklanmalı?

Üretim için — en az 7 gün (günlük döndürme) veya 3–5 arşiv (boyut tabanlı döndürme). Uyumluluk gereksinimleri için — 30–90 gün, ancak aynı bölümde döndürme yerine sıkıştırma ve saklama politikası olan ayrı depolama kullanın.

logrotate mobil cihazlarda nasıl çalışır?

logrotate bir Linux yardımcı programıdır — iOS veya Android'de kullanılamaz. Mobil cihazlarda döndürme kitaplıklar tarafından uygulanır: iOS için CocoaLumberjack ve Android için Logback. Kök erişimi gerektirmezler ve uygulamanın sandbox ortamında çalışırlar.

Loglar her dakika döndürülürse ne yapmalı?

Döngüsel loglama olup olmadığını kontrol edin — hata işlemenin kendisinin yeni bir hata oluşturması durumu. Koruma ekleyin: bir eşikle aynı türden tekrarlanan loglamalar için sayaç (dakikada 100'den fazla aynı mesaj olmamalı) ve aşımdan sonra geçici kilit.

Log arşivlerini sıkıştırmak zorunlu mu?

Zorunlu değil, ancak önerilir. gzip, metin loglarını veri kaybı olmadan 10–20 kat sıkıştırır. Mobil cihazlarda sıkıştırma, depolama alanını 50 MB'tan 3–5 MB'a düşürür. Tek dezavantajı — arşivin sıkıştırmayı açmadan okunamamasıdır, ancak analiz için genellikle yalnızca geçerli dosya gerekir.

Özet

  • Log Rotation — sınıra ulaşıldığında yeni dosya oluşturma ve disk taşmasını önlemek için eski dosyaları arşivleme ile otomatik log dosyası yönetimi
  • Üç strateji — dosya boyutuna göre (en yaygın), zamana göre (dökümler için) ve dosya sayısına göre (sınırlı alana sahip mobil cihazlar için)
  • logrotate — esnek parametrelerle (daily, size, compress, rotate, postrotate betikleri) sunucu tarafı döndürme için standart Linux yardımcı programı
  • Mobil kitaplıklar — iOS'ta CocoaLumberjack ve Android'de Logback, sıkıştırma ve arşiv sayısı sınırlamasıyla boyut tabanlı döndürmeyi destekler
  • Disk kotası — tüm loglar için toplam sınır: mobil uygulamalar için 20 MB ve aşımda uyarı ile sunucular için bölümün %80'i
  • İzleme — çok sık döndürme (saatte 10'dan fazla) döngüsel hata loglaması veya aşırı log hacmi sinyali verir
  • gzip sıkıştırma — arşiv boyutunu 10–20 kat azaltır, tüm platformlar için önerilir; delaycompress hızlı okuma için son arşivi sıkıştırılmamış bırakır

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun