Log Rotation হল লগ ফাইলগুলির স্বয়ংক্রিয় ব্যবস্থাপনার একটি ব্যবস্থা যা আর্কাইভ, কম্প্রেশন এবং পুরানো রেকর্ড মুছে ফেলার মাধ্যমে ডিস্ক ওভারফ্লো প্রতিরোধ করে। মোবাইল অ্যাপ্লিকেশনে, লগগুলি ব্যবহারকারীর ডিভাইসে জমা হয় এবং রোটেশন ছাড়া তারা ব্যবহারের কয়েক সপ্তাহের মধ্যে গিগাবাইট মেমরি নিতে পারে। Redis ডকুমেন্টেশন অনুসারে, সঠিক log rotation কনফিগারেশন অনিয়ন্ত্রিত লগ বৃদ্ধির তুলনায় ডিস্ক পূর্ণ হওয়ার কারণে সিস্টেম ব্যর্থতার ঝুঁকি 99% হ্রাস করে। প্রধান রোটেশন কৌশলগুলি হল: ফাইলের আকার অনুসারে, সময় অনুসারে এবং ফাইলের সংখ্যা অনুসারে — প্রতিটি ব্যবহারের পরিস্থিতির উপর নির্ভর করে বেছে নেওয়া হয়: Linux-এ logrotate, iOS-এ CocoaLumberjack এবং Android-এ Timber সব তিনটি পদ্ধতিই সমর্থন করে।
মূল পয়েন্ট
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 দিনের স্টোরেজ। নেতিবাচক দিক — একটি ফাইল ভারী লোডের অধীনে প্রতিদিন এক গিগাবাইট পর্যন্ত বাড়তে পারে।
logrotate হল স্বয়ংক্রিয় লগ রোটেশনের জন্য মানক Linux ইউটিলিটি। এটি cron-এর মাধ্যমে চলে এবং /etc/logrotate.d/ থেকে কনফিগারেশন ফাইল প্রক্রিয়া করে। প্রতিটি সার্ভিস (nginx, postgresql, অ্যাপ্লিকেশন) লগ পাথ, রোটেশন কৌশল এবং রোটেশন-পরবর্তী ক্রিয়া নির্দিষ্ট করে নিজস্ব কনফিগ তৈরি করে।
# /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 সিগন্যাল পাঠায়।
size — একটি আকারে পৌঁছালে রোটেশন (size 100M)। rotate — আর্কাইভ কপির সংখ্যা (rotate 7)। compress — gzip কম্প্রেশন। dateext — ক্রমিক সংখ্যার পরিবর্তে ফাইলের নামে তারিখ যোগ করে। sharedscripts — প্রতিটি ফাইলের জন্য আলাদাভাবে নয়, বরং সমস্ত ফাইলের জন্য একবার postrotate চালায়। maxage — N দিনের বেশি পুরানো আর্কাইভ মুছে ফেলে।
মোবাইল ডিভাইসে, Log Rotation গুরুত্বপূর্ণ কারণ ব্যবহারকারী ফাইল সিস্টেম পরিচালনা করে না এবং আশা করে না যে অ্যাপ্লিকেশন লগ দিয়ে গিগাবাইট নেবে। iOS এবং Android-এ অন্তর্নির্মিত ব্যবস্থা রয়েছে: iOS-এ os_log একটি নির্দিষ্ট আকারের রিং বাফার ব্যবহার করে (ওভাররাইট দ্বারা রোটেশন), Android Logcat-এ কার্নেলে সীমিত বাফার রয়েছে।
iOS-এ কাস্টম ফাইল লগের জন্য CocoaLumberjack DDFileLogger ক্লাসের সাথে ব্যবহার করা হয়, যা আকার এবং সময়-ভিত্তিক রোটেশন সমর্থন করে। Android-এ — Logback বা RollingFileAppender-এর মাধ্যমে কাস্টম বাস্তবায়ন। উভয় টুল সর্বোচ্চ ফাইলের আকার এবং আর্কাইভের সংখ্যা নির্ধারণের অনুমতি দেয়।
// 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 অ্যাপ্লিকেশনকে নিজস্ব ডিরেক্টরিতে লগ লেখা থেকে সীমাবদ্ধ করে না। যদি একজন ডেভেলপার রোটেশন ছাড়া একটি ফাইলে ডিবাগ লগ লেখে, সক্রিয় ব্যবহারের এক মাসের মধ্যে সেগুলি 500 MB থেকে 1 GB নিতে পারে। ব্যবহারকারী সমস্যাটি আবিষ্কার করবে যখন সিস্টেম কম স্টোরেজ সতর্কতা দেখাবে এবং অ্যাপ্লিকেশন মুছে ফেলবে। RollingFileAppender-এর সাথে Logback এই সমস্যার সমাধান করে: 3টি আর্কাইভ সহ 5 MB-এর সীমা গ্যারান্টি দেয় যে লগ কখনও 20 MB-এর বেশি হবে না।
নীচে উভয় প্ল্যাটফর্মে লগ রোটেশন কনফিগারেশনের উদাহরণ দেওয়া হল। iOS-এ CocoaLumberjack ব্যবহার করা হয়, Android-এ — XML কনফিগারেশন সহ Logback।
// 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 সেট করা হয়, সীমা সরানো হয় — লগ অনির্দিষ্টকালের জন্য জমা হবে, যা প্রোডাকশনের জন্য বিপজ্জনক।
// মোট ভলিউম পরীক্ষা সহ কাস্টম রোটেশন
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 একটি Linux ইউটিলিটি — এটি iOS বা Android-এ উপলব্ধ নয়। মোবাইল ডিভাইসে, রোটেশন লাইব্রেরি দ্বারা বাস্তবায়িত হয়: iOS-এর জন্য CocoaLumberjack এবং Android-এর জন্য Logback। তাদের রুট অ্যাক্সেসের প্রয়োজন হয় না এবং অ্যাপ্লিকেশনের স্যান্ডবক্স পরিবেশে কাজ করে।
পরীক্ষা করুন সার্কুলার লগিং আছে কিনা — যখন ত্রুটি হ্যান্ডলিং নিজেই একটি নতুন ত্রুটি তৈরি করে। সুরক্ষা যোগ করুন: একই ধরণের পুনরাবৃত্ত লগিংয়ের জন্য একটি সীমা সহ কাউন্টার (প্রতি মিনিটে 100টির বেশি অভিন্ন বার্তা নয়) এবং অতিক্রম করার পরে অস্থায়ী লক।
বাধ্যতামূলক নয়, তবে সুপারিশ করা হয়। gzip টেক্সট লগ ডেটা ক্ষতি ছাড়া 10–20 গুণ কম্প্রেস করে। মোবাইল ডিভাইসে, কম্প্রেশন 50 MB থেকে 3–5 MB-তে স্টোরেজ হ্রাস করে। একমাত্র নেতিবাচক দিক — ডিকম্প্রেশন ছাড়া আর্কাইভ পড়া যায় না, তবে বিশ্লেষণের জন্য সাধারণত শুধুমাত্র বর্তমান ফাইলের প্রয়োজন হয়।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন