Log Rotation: كيف يعمل، استراتيجيات التدوير والإعدادات للمشاريع المحمولة

المؤلف: IT Sectr نُشر: 2026-05-28 وقت القراءة: 8 دق

Log Rotation هي آلية تلقائية لإدارة ملفات السجل تمنع امتلاء القرص من خلال الأرشفة والضغط وحذف السجلات القديمة. في التطبيقات المحمولة، تتراكم السجلات على جهاز المستخدم، وبدون التدوير يمكن أن تشغل غيغابايتات من الذاكرة في غضون أسابيع من الاستخدام. وفقًا لـ وثائق Redis، فإن الإعداد الصحيح لـ log rotation يقلل من خطر فشل النظام بسبب امتلاء القرص بنسبة 99% مقارنة بالنمو غير المنضبط للسجلات. استراتيجيات التدوير الرئيسية هي: حسب حجم الملف، حسب الوقت وحسب عدد الملفات — يتم اختيار كل منها اعتمادًا على حالة الاستخدام: logrotate في Linux وCocoaLumberjack على iOS وTimber على Android تدعم جميعها الأساليب الثلاثة.

النقاط الرئيسية

  • Log Rotation — التبديل التلقائي لملف السجل النشط عند الوصول إلى حد محدد مع أرشفة أو حذف الملفات القديمة
  • التدوير حسب الحجم — إنشاء ملف جديد عندما يصل الملف الحالي إلى الحد (نموذجياً 10–100 ميجابايت)، يتم ضغط القديم إلى .gz
  • التدوير حسب الوقت — تبديل الملف كل N ساعة أو مرة يوميًا بغض النظر عن الحجم، مناسب للنسخ الاحتياطية اليومية
  • logrotate — الأداة القياسية في Linux للتدوير التلقائي لسجلات النظام والتطبيقات
  • حصة القرص — تحديد الحجم الإجمالي لجميع السجلات على الجهاز، وعند تجاوزه يتم حذف أقدم الملفات

ما هو Log Rotation

Log Rotation هي عملية التبديل الدوري لملف السجل النشط إلى ملف جديد مع أرشفة أو ضغط أو حذف الملف القديم في نفس الوقت. بدون التدوير، ينمو ملف سجل واحد إلى أجل غير مسمى حتى يملأ قسم القرص بأكمله، مما يؤدي إلى تعطل التطبيق وفقدان البيانات.

السيناريو النموذجي: يكتب التطبيق السجلات في ملف app.log. عندما يصل app.log إلى 100 ميجابايت، يعيد النظام تسميته إلى app.log.1، ويضغطه إلى app.log.1.gz وينشئ ملف app.log جديدًا فارغًا. عند الامتلاء التالي، يصبح app.log.1 هو app.log.2، ويصبح app.log.1.gz هو app.log.2.gz، ويتم حذف app.log.2.gz القديم. تسمى هذه الآلية التدوير مع عدد الاحتفاظ — عدد النسخ المؤرشفة ثابت.

وفقًا لـ Splunk (2023)، فإن التكوين غير الصحيح للتدوير هو سبب 40% من الحوادث المتعلقة بنفاد مساحة القرص على خوادم التطبيقات. بالنسبة للأجهزة المحمولة، التدوير أكثر أهمية لأن المستخدم لا يمكنه ولا ينبغي له إدارة السجلات يدويًا.

استراتيجيات تدوير السجلات

Log Rotation يدعم ثلاث استراتيجيات أساسية يمكن دمجها. يعتمد اختيار الاستراتيجية على نوع التطبيق: أنظمة الخوادم تستخدم غالبًا التدوير حسب الوقت، والتطبيقات المحمولة حسب الحجم، والأنظمة المضمنة حسب عدد الملفات.

الاستراتيجيةالمحفزمتى تستخدم
حسب الحجموصل الملف إلى N بايتالأنظمة عالية التحميل بحجم سجلات غير متوقع
حسب الوقتمر N ساعة/يومالنسخ الاحتياطية اليومية، متطلبات الامتثال
حسب عدد الملفاتتم إنشاء N ملفالأجهزة المحمولة ذات مساحة القرص المحدودة

التدوير حسب الحجم — الأكثر شيوعًا

التدوير حسب الحجم يضمن عدم تجاوز أي ملف سجل للحد المحدد. يتم اختيار الحد بناءً على مساحة القرص المتاحة وتكرار التسجيل. بالنسبة للخادم، الحد النموذجي هو 100–500 ميجابايت لكل ملف، للجهاز المحمول — 1–10 ميجابايت. إذا كان التطبيق يسجل بشكل مكثف، يجب خفض الحد، وإلا فسيحدث التدوير كل بضع دقائق.

التدوير حسب الوقت — للامتثال

التدوير حسب الوقت مستقل عن حجم السجلات — يتم تبديل الملف بدقة وفقًا لجدول زمني. مناسب للأنظمة حيث يجب تخزين السجلات لعدد ثابت من الأيام: التدوير اليومي مع عدد الاحتفاظ = 30 يعني 30 يومًا من التخزين. الجانب السلبي — يمكن أن ينمو ملف واحد إلى غيغابايت يوميًا تحت التحميل المكثف.

logrotate في Linux: الإعدادات والأمثلة

logrotate هي الأداة القياسية في Linux للتدوير التلقائي للسجلات. يتم تشغيلها عبر cron وتعالج ملفات التكوين من /etc/logrotate.d/. كل خدمة (nginx، postgresql، تطبيق) تنشئ تكوينها الخاص مع تحديد مسارات السجلات واستراتيجية التدوير والإجراءات بعد التدوير.

cpp
# /etc/logrotate.d/myapp — تدوير سجلات التطبيق
/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
}

يقوم هذا التكوين بتدوير السجلات يوميًا، ويحتفظ بـ 7 نسخ مؤرشفة، ويضغط الملفات القديمة بـ gzip (باستثناء الأخير — delaycompress)، ولا يُصدر خطأ إذا كانت السجلات مفقودة (missingok)، ولا يدور الملفات الفارغة (notifempty)، ويعيد إنشاء الملف بصلاحيات 0640. بعد التدوير، يرسل إشارة HUP إلى عملية التطبيق عبر سكريبت postrotate.

معلمات logrotate

size — التدوير عند الوصول إلى حجم معين (size 100M). rotate — عدد النسخ المؤرشفة (rotate 7). compress — ضغط gzip. dateext — إضافة التاريخ إلى اسم الملف بدلاً من الرقم التسلسلي. sharedscripts — تنفيذ postrotate مرة واحدة لجميع الملفات، وليس لكل ملف على حدة. maxage — حذف الأرشيفات الأقدم من N يومًا.

Log Rotation في التطبيقات المحمولة

على الأجهزة المحمولة، Log Rotation ضرورية لأن المستخدم لا يدير نظام الملفات ولا يتوقع أن يشغل التطبيق غيغابايتات من السجلات. iOS وAndroid لديهما آليات مدمجة: os_log على iOS يستخدم مخزنًا دائريًا بحجم ثابت (التدوير بالكتابة فوق)، Android Logcat لديه مخزن مؤقت محدود في النواة.

بالنسبة لسجلات الملفات المخصصة على iOS، يتم استخدام CocoaLumberjack مع فئة DDFileLogger التي تدعم التدوير حسب الحجم والوقت. على Android — Logback أو تطبيقات مخصصة عبر RollingFileAppender. كلتا الأداتين تسمحان بتعيين الحد الأقصى لحجم الملف وعدد الأرشيفات.

swift
// CocoaLumberjack — تدوير الملفات على iOS
import CocoaLumberjack

let fileLogger = DDFileLogger()
fileLogger.maximumFileSize = 1024 * 1024 // 1 ميجابايت
fileLogger.logFileManager.maximumNumberOfLogFiles = 5
DDLog.add(fileLogger)

iOS: os_log لا يتطلب التدوير — تتم الكتابة فوق الرسائل في المخزن الدائري. ولكن إذا كان التطبيق يكتب سجلات ملفات مخصصة (لتصحيح الأخطاء أو للإرسال إلى الخادم)، فيجب تكوين التدوير يدويًا. CocoaLumberjack هو الخيار القياسي لفرق iOS — فهو يضغط الأرشيفات تلقائيًا إلى .gz ويحذف الملفات القديمة عند تجاوز الحد.

لماذا التدوير مهم على Android

Android لا يقيد التطبيقات من كتابة السجلات في دليلها الخاص. إذا كتب المطور سجلات تصحيح الأخطاء في ملف بدون تدوير، فخلال شهر من الاستخدام النشط يمكن أن تشغل من 500 ميجابايت إلى 1 غيغابايت. سيكتشف المستخدم المشكلة عندما يعرض النظام تحذيرًا بشأن عدم كفاية المساحة وسيقوم بحذف التطبيق. Logback مع RollingFileAppender يحل هذه المشكلة: حد 5 ميجابايت مع 3 أرشيفات يضمن ألا تتجاوز السجلات 20 ميجابايت أبدًا.

أمثلة تطبيق التدوير على iOS وAndroid

فيما يلي أمثلة على تكوين تدوير السجلات على كلا النظامين. على iOS يُستخدم CocoaLumberjack، على Android — Logback مع تكوين XML.

kotlin
// Logback على Android — تكوين التدوير في logback.xml
// حجم الملف 5 ميجابايت، 3 نسخ مؤرشفة
@file:Suppress("unused")

// في 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 على iOS يدعم ليس فقط التدوير حسب الحجم ولكن أيضًا حذف السجلات القديمة حسب التاريخ باستخدام logFileManager.maximumLogFiles. إذا تم تعيين maximumLogFiles = 0، تتم إزالة الحد — ستتراكم السجلات إلى أجل غير مسمى، وهو أمر خطير للإنتاج.

swift
// تدوير مخصص مع التحقق من الحجم الإجمالي
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 {
            // حذف أقدم ملف
            files.sorted { $0.path < $1.path }.first.map {
                try? FileManager.default.removeItem(at: $0)
            }
        }
    }
}

المراقبة والتنبيهات عند التدوير

Log Rotation ليس فقط أرشفة تلقائية بل أيضًا مؤشر على صحة النظام. إذا كانت السجلات تُدار بشكل متكرر جدًا (كل بضع دقائق)، فهذه إشارة على تسجيل مفرط أو حلقة تسجيل أخطاء. قم بإعداد تنبيهات على تكرار التدوير: أكثر من 10 تدويرات في الساعة يستدعي الفحص.

أنظمة المراقبة (Prometheus، Grafana، Datadog) يمكنها تتبع مقاييس التدوير عبر مُصدّرات نظام الملفات. Prometheus node_exporter يوفر مقاييس حجم الملفات ووقت تعديلها. على الأجهزة المحمولة، عادة ما تكون مراقبة التدوير مدمجة في SDK: CocoaLumberjack يسجل حدث التدوير عبر DDLog، وLogback يرسل الحالة عبر appender.

التنبيهات: إذا كان عدد الأرشيفات أكثر من المتوقع (تجاوز عدد التدوير الحد) أو تجاوز الحجم الإجمالي للسجلات الحصة — يجب على النظام إخطار المسؤول. للخوادم، الحد القياسي هو 80% من حجم القسم، للأجهزة المحمولة — تنبيه عند تجاوز 50 ميجابايت لكل تطبيق.

الأسئلة الشائعة

ما هو الحجم الأمثل لملف السجل للتدوير؟

للخوادم — 100–500 ميجابايت، للتطبيقات المحمولة — 1–10 ميجابايت. الحد الصغير جدًا (أقل من 1 ميجابايت) يسبب تدويرًا متكررًا وعمليات إدخال/إخراج غير ضرورية. الحد الكبير جدًا (أكثر من 500 ميجابايت) يزيد من وقت فتح الملف والبحث فيه.

كم عدد النسخ المؤرشفة من السجلات التي يجب الاحتفاظ بها؟

للإنتاج — على الأقل 7 أيام (التدوير اليومي) أو 3–5 أرشيفات (التدوير حسب الحجم). لمتطلبات الامتثال — 30–90 يومًا، ولكن استخدم تخزينًا منفصلاً مع ضغط وسياسة احتفاظ، وليس التدوير على نفس القسم.

كيف يعمل logrotate على الأجهزة المحمولة؟

logrotate هي أداة Linux — غير متوفرة على iOS وAndroid. على الأجهزة المحمولة، يتم تنفيذ التدوير بواسطة مكتبات: CocoaLumberjack لنظام iOS وLogback لنظام Android. لا تتطلب وصول الجذر وتعمل في بيئة sandbox الخاصة بالتطبيق.

ماذا تفعل إذا كانت السجلات تُدار كل دقيقة؟

تحقق مما إذا كان هناك تسجيل دائري — عندما يولد معالجة الخطأ خطأ جديدًا. أضف حماية: عداد للتسجيلات المتكررة من نفس النوع مع حد (لا يزيد عن 100 رسالة متطابقة في الدقيقة) وقفل مؤقت بعد تجاوزه.

هل من الإلزامي ضغط أرشيفات السجلات؟

ليس إلزاميًا، لكنه موصى به. gzip يضغط السجلات النصية من 10 إلى 20 مرة دون فقدان البيانات. على الأجهزة المحمولة، يقلل الضغط المساحة المشغولة من 50 ميجابايت إلى 3–5 ميجابايت. العيب الوحيد — لا يمكن قراءة الأرشيف بدون فك الضغط، لكن للتحليل عادة ما يكون الملف الحالي فقط مطلوبًا.

الملخص

  • Log Rotation — إدارة تلقائية لملفات السجل مع إنشاء ملفات جديدة عند الوصول إلى الحد وأرشفة الملفات القديمة لمنع امتلاء القرص
  • ثلاث استراتيجيات — حسب حجم الملف (الأكثر شيوعًا)، حسب الوقت (للنسخ الاحتياطية) وحسب عدد الملفات (للأجهزة المحمولة ذات المساحة المحدودة)
  • logrotate — أداة Linux القياسية لتدوير الخادم مع معلمات مرنة: daily، size، compress، rotate، سكريبتات postrotate
  • مكتبات المحمول — CocoaLumberjack على iOS وLogback على Android يدعمان التدوير حسب الحجم مع الضغط والحد من عدد الأرشيفات
  • حصة القرص — الحد الإجمالي لجميع السجلات: 20 ميجابايت للتطبيقات المحمولة و80% من القسم للخوادم مع تنبيه عند التجاوز
  • المراقبة — التدوير المتكرر جدًا (أكثر من 10 مرات في الساعة) يشير إلى تسجيل دائري للأخطاء أو حجم سجلات مفرط
  • ضغط gzip — يقلل حجم الأرشيفات من 10 إلى 20 مرة، موصى به لجميع المنصات؛ delaycompress يترك آخر أرشيف غير مضغوط للقراءة السريعة

سنقوم بتطوير تطبيق جوال جاهز

تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.

مناقشة المشروع

اقرأ أيضًا