Log Rotation: এটি কীভাবে কাজ করে, রোটেশন কৌশল এবং মোবাইল প্রকল্পের জন্য কনফিগারেশন

লেখক: IT Sectr প্রকাশিত: 2026-05-28 পড়ার সময়: 8 মিনিট

Log Rotation হল লগ ফাইলগুলির স্বয়ংক্রিয় ব্যবস্থাপনার একটি ব্যবস্থা যা আর্কাইভ, কম্প্রেশন এবং পুরানো রেকর্ড মুছে ফেলার মাধ্যমে ডিস্ক ওভারফ্লো প্রতিরোধ করে। মোবাইল অ্যাপ্লিকেশনে, লগগুলি ব্যবহারকারীর ডিভাইসে জমা হয় এবং রোটেশন ছাড়া তারা ব্যবহারের কয়েক সপ্তাহের মধ্যে গিগাবাইট মেমরি নিতে পারে। Redis ডকুমেন্টেশন অনুসারে, সঠিক log rotation কনফিগারেশন অনিয়ন্ত্রিত লগ বৃদ্ধির তুলনায় ডিস্ক পূর্ণ হওয়ার কারণে সিস্টেম ব্যর্থতার ঝুঁকি 99% হ্রাস করে। প্রধান রোটেশন কৌশলগুলি হল: ফাইলের আকার অনুসারে, সময় অনুসারে এবং ফাইলের সংখ্যা অনুসারে — প্রতিটি ব্যবহারের পরিস্থিতির উপর নির্ভর করে বেছে নেওয়া হয়: Linux-এ logrotate, iOS-এ CocoaLumberjack এবং Android-এ Timber সব তিনটি পদ্ধতিই সমর্থন করে।

মূল পয়েন্ট

  • Log Rotation — নির্ধারিত সীমায় পৌঁছালে সক্রিয় লগ ফাইলের স্বয়ংক্রিয় পরিবর্তন, পুরানো ফাইলগুলির আর্কাইভ বা মুছে ফেলার সাথে
  • আকার-ভিত্তিক রোটেশন — বর্তমান ফাইল সীমায় পৌঁছালে (সাধারণত 10–100 MB) নতুন ফাইল তৈরি করে, পুরানোটি .gz-এ সংকুচিত হয়
  • সময়-ভিত্তিক রোটেশন — প্রতি N ঘন্টা বা দিনে একবার আকার নির্বিশেষে ফাইল পরিবর্তন, দৈনিক ডাম্পের জন্য সুবিধাজনক
  • logrotate — সিস্টেম এবং অ্যাপ্লিকেশন লগের স্বয়ংক্রিয় রোটেশনের জন্য মানক Linux ইউটিলিটি
  • ডিস্ক কোটা — ডিভাইসে সমস্ত লগের মোট ভলিউম সীমিত করে, অতিক্রম করলে প্রাচীনতম ফাইলগুলি মুছে ফেলা হয়

Log Rotation কী

Log Rotation হল সক্রিয় লগ ফাইলটি পর্যায়ক্রমে একটি নতুন ফাইলে পরিবর্তন করার প্রক্রিয়া যার সাথে পুরানো ফাইলটি আর্কাইভ, কম্প্রেস বা মুছে ফেলা হয়। রোটেশন ছাড়া, একটি একক লগ ফাইল অনির্দিষ্টকালের জন্য বাড়তে থাকে যতক্ষণ না এটি পুরো ডিস্ক পার্টিশন পূর্ণ করে, যা অ্যাপ্লিকেশন ব্যর্থতা এবং ডেটা ক্ষতির দিকে নিয়ে যায়।

সাধারণ পরিস্থিতি: একটি অ্যাপ্লিকেশন app.log ফাইলে লগ লেখে। যখন app.log 100 MB-তে পৌঁছায়, সিস্টেম এটির নাম পরিবর্তন করে 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 MB, মোবাইল ডিভাইসের জন্য — 1–10 MB। যদি অ্যাপ্লিকেশন আক্রমণাত্মকভাবে লগ করে, সীমা কমাতে হবে, অন্যথায় প্রতি কয়েক মিনিটে রোটেশন ঘটবে।

সময়-ভিত্তিক রোটেশন — কমপ্লায়েন্সের জন্য

সময়-ভিত্তিক রোটেশন লগ ভলিউম থেকে স্বাধীন — ফাইলটি নির্ধারিত সময়সূচী অনুযায়ী পরিবর্তিত হয়। সিস্টেমগুলির জন্য সুবিধাজনক যেখানে লগগুলি নির্দিষ্ট সংখ্যক দিনের জন্য সংরক্ষণ করতে হবে: কিপ কাউন্ট = 30 সহ দৈনিক রোটেশন মানে 30 দিনের স্টোরেজ। নেতিবাচক দিক — একটি ফাইল ভারী লোডের অধীনে প্রতিদিন এক গিগাবাইট পর্যন্ত বাড়তে পারে।

Linux-এ logrotate: কনফিগারেশন এবং উদাহরণ

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 অনুমতি দিয়ে ফাইল পুনরায় তৈরি করে। রোটেশনের পরে, এটি postrotate স্ক্রিপ্টের মাধ্যমে অ্যাপ্লিকেশন প্রক্রিয়ায় HUP সিগন্যাল পাঠায়।

logrotate প্যারামিটার

size — একটি আকারে পৌঁছালে রোটেশন (size 100M)। rotate — আর্কাইভ কপির সংখ্যা (rotate 7)। compress — gzip কম্প্রেশন। dateext — ক্রমিক সংখ্যার পরিবর্তে ফাইলের নামে তারিখ যোগ করে। sharedscripts — প্রতিটি ফাইলের জন্য আলাদাভাবে নয়, বরং সমস্ত ফাইলের জন্য একবার postrotate চালায়। maxage — N দিনের বেশি পুরানো আর্কাইভ মুছে ফেলে।

মোবাইল অ্যাপ্লিকেশনে Log Rotation

মোবাইল ডিভাইসে, Log Rotation গুরুত্বপূর্ণ কারণ ব্যবহারকারী ফাইল সিস্টেম পরিচালনা করে না এবং আশা করে না যে অ্যাপ্লিকেশন লগ দিয়ে গিগাবাইট নেবে। iOS এবং Android-এ অন্তর্নির্মিত ব্যবস্থা রয়েছে: iOS-এ os_log একটি নির্দিষ্ট আকারের রিং বাফার ব্যবহার করে (ওভাররাইট দ্বারা রোটেশন), Android Logcat-এ কার্নেলে সীমিত বাফার রয়েছে।

iOS-এ কাস্টম ফাইল লগের জন্য CocoaLumberjack DDFileLogger ক্লাসের সাথে ব্যবহার করা হয়, যা আকার এবং সময়-ভিত্তিক রোটেশন সমর্থন করে। Android-এ — Logback বা RollingFileAppender-এর মাধ্যমে কাস্টম বাস্তবায়ন। উভয় টুল সর্বোচ্চ ফাইলের আকার এবং আর্কাইভের সংখ্যা নির্ধারণের অনুমতি দেয়।

swift
// CocoaLumberjack — iOS-এ ফাইল রোটেশন
import CocoaLumberjack

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

iOS: os_log-এর রোটেশন প্রয়োজন হয় না — বার্তাগুলি রিং বাফারে ওভাররাইট হয়। কিন্তু যদি অ্যাপ্লিকেশন কাস্টম ফাইল লগ লেখে (ডিবাগিং বা সার্ভারে পাঠানোর জন্য), রোটেশন ম্যানুয়ালি কনফিগার করতে হবে। CocoaLumberjack iOS টিমের জন্য মানক পছন্দ — এটি স্বয়ংক্রিয়ভাবে আর্কাইভ .gz-এ কম্প্রেস করে এবং সীমা অতিক্রম করলে পুরানো ফাইল মুছে ফেলে।

Android-এ রোটেশন কেন গুরুত্বপূর্ণ

Android অ্যাপ্লিকেশনকে নিজস্ব ডিরেক্টরিতে লগ লেখা থেকে সীমাবদ্ধ করে না। যদি একজন ডেভেলপার রোটেশন ছাড়া একটি ফাইলে ডিবাগ লগ লেখে, সক্রিয় ব্যবহারের এক মাসের মধ্যে সেগুলি 500 MB থেকে 1 GB নিতে পারে। ব্যবহারকারী সমস্যাটি আবিষ্কার করবে যখন সিস্টেম কম স্টোরেজ সতর্কতা দেখাবে এবং অ্যাপ্লিকেশন মুছে ফেলবে। RollingFileAppender-এর সাথে Logback এই সমস্যার সমাধান করে: 3টি আর্কাইভ সহ 5 MB-এর সীমা গ্যারান্টি দেয় যে লগ কখনও 20 MB-এর বেশি হবে না।

iOS এবং Android-এ রোটেশন বাস্তবায়নের উদাহরণ

নীচে উভয় প্ল্যাটফর্মে লগ রোটেশন কনফিগারেশনের উদাহরণ দেওয়া হল। iOS-এ CocoaLumberjack ব্যবহার করা হয়, Android-এ — XML কনফিগারেশন সহ Logback

kotlin
// Android-এ Logback — logback.xml-এ রোটেশন কনফিগারেশন
// ফাইলের আকার 5MB, 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>

iOS-এ CocoaLumberjack শুধু আকার-ভিত্তিক রোটেশনই নয়, 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 অ্যাপেন্ডারের মাধ্যমে স্থিতি পাঠায়।

সতর্কতা: যদি আশার চেয়ে বেশি আর্কাইভ থাকে (রোটেশন কাউন্ট সীমা অতিক্রম করেছে) বা মোট লগ ভলিউম কোটা অতিক্রম করে — সিস্টেমকে প্রশাসককে অবহিত করা উচিত। সার্ভারের জন্য, মানক সীমা হল পার্টিশন আকারের 80%; মোবাইল ডিভাইসের জন্য — প্রতি অ্যাপ্লিকেশনে 50 MB অতিক্রম করলে সতর্কতা।

সচরাচর জিজ্ঞাসিত প্রশ্ন

রোটেশনের জন্য লগ ফাইলের সর্বোত্তম আকার কত?

সার্ভারের জন্য — 100–500 MB, মোবাইল অ্যাপ্লিকেশনের জন্য — 1–10 MB। খুব ছোট সীমা (1 MB-এর কম) ঘন ঘন রোটেশন এবং অপ্রয়োজনীয় I/O অপারেশন ঘটায়। খুব বড় সীমা (500 MB-এর বেশি) ফাইল খোলা এবং অনুসন্ধানের সময় বাড়ায়।

লগের কতগুলি আর্কাইভ কপি রাখা উচিত?

প্রোডাকশনের জন্য — কমপক্ষে 7 দিন (দৈনিক রোটেশন) বা 3–5 আর্কাইভ (আকার-ভিত্তিক রোটেশন)। কমপ্লায়েন্স প্রয়োজনীয়তার জন্য — 30–90 দিন, কিন্তু একই পার্টিশনে রোটেশনের পরিবর্তে কম্প্রেশন এবং ধারণ নীতি সহ পৃথক স্টোরেজ ব্যবহার করুন।

মোবাইল ডিভাইসে logrotate কীভাবে কাজ করে?

logrotate একটি Linux ইউটিলিটি — এটি iOS বা Android-এ উপলব্ধ নয়। মোবাইল ডিভাইসে, রোটেশন লাইব্রেরি দ্বারা বাস্তবায়িত হয়: iOS-এর জন্য CocoaLumberjack এবং Android-এর জন্য Logback। তাদের রুট অ্যাক্সেসের প্রয়োজন হয় না এবং অ্যাপ্লিকেশনের স্যান্ডবক্স পরিবেশে কাজ করে।

লগ প্রতি মিনিটে ঘুরলে কী করবেন?

পরীক্ষা করুন সার্কুলার লগিং আছে কিনা — যখন ত্রুটি হ্যান্ডলিং নিজেই একটি নতুন ত্রুটি তৈরি করে। সুরক্ষা যোগ করুন: একই ধরণের পুনরাবৃত্ত লগিংয়ের জন্য একটি সীমা সহ কাউন্টার (প্রতি মিনিটে 100টির বেশি অভিন্ন বার্তা নয়) এবং অতিক্রম করার পরে অস্থায়ী লক।

লগ আর্কাইভ কম্প্রেস করা বাধ্যতামূলক?

বাধ্যতামূলক নয়, তবে সুপারিশ করা হয়। gzip টেক্সট লগ ডেটা ক্ষতি ছাড়া 10–20 গুণ কম্প্রেস করে। মোবাইল ডিভাইসে, কম্প্রেশন 50 MB থেকে 3–5 MB-তে স্টোরেজ হ্রাস করে। একমাত্র নেতিবাচক দিক — ডিকম্প্রেশন ছাড়া আর্কাইভ পড়া যায় না, তবে বিশ্লেষণের জন্য সাধারণত শুধুমাত্র বর্তমান ফাইলের প্রয়োজন হয়।

সারসংক্ষেপ

  • Log Rotation — সীমায় পৌঁছালে নতুন ফাইল তৈরি এবং ডিস্ক ওভারফ্লো প্রতিরোধের জন্য পুরানো ফাইলগুলির আর্কাইভ সহ স্বয়ংক্রিয় লগ ফাইল ব্যবস্থাপনা
  • তিনটি কৌশল — ফাইলের আকার অনুসারে (সবচেয়ে সাধারণ), সময় অনুসারে (ডাম্পের জন্য) এবং ফাইল গণনা অনুসারে (সীমিত স্থান সহ মোবাইল ডিভাইসের জন্য)
  • logrotate — নমনীয় প্যারামিটার সহ সার্ভার-সাইড রোটেশনের জন্য মানক Linux ইউটিলিটি: daily, size, compress, rotate, postrotate স্ক্রিপ্ট
  • মোবাইল লাইব্রেরি — iOS-এ CocoaLumberjack এবং Android-এ Logback কম্প্রেশন এবং আর্কাইভ গণনা সীমা সহ আকার-ভিত্তিক রোটেশন সমর্থন করে
  • ডিস্ক কোটা — সমস্ত লগের মোট সীমা: মোবাইল অ্যাপ্লিকেশনের জন্য 20 MB এবং অতিক্রম করলে সতর্কতা সহ সার্ভারের জন্য পার্টিশনের 80%
  • মনিটরিং — খুব ঘন ঘন রোটেশন (প্রতি ঘন্টায় 10টির বেশি) সার্কুলার ত্রুটি লগিং বা অত্যধিক লগ ভলিউম নির্দেশ করে
  • gzip কম্প্রেশন — আর্কাইভের আকার 10–20 গুণ হ্রাস করে, সমস্ত প্ল্যাটফর্মের জন্য সুপারিশ করা হয়; delaycompress দ্রুত পড়ার জন্য শেষ আর্কাইভটি অকম্প্রেসড রেখে দেয়

আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব

IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।

প্রকল্প নিয়ে আলোচনা করুন

আরও পড়ুন