آموزش پیکربندی Log4j برای فشرده‌سازی لاگ‌ها (Compression) در نسخه‌های جدید

مقدمه

در دنیای توسعه نرم‌افزار، مدیریت و ذخیره‌سازی لاگ‌ها اهمیت بسیار بالایی دارد. فریمورک Log4j یکی از محبوب‌ترین کتابخانه‌های ثبت لاگ در جاوا است که امکان ذخیره‌سازی، فرمت‌بندی و حتی فشرده‌سازی لاگ‌ها را فراهم می‌کند. در این مقاله از رادیب، به‌طور کامل نحوه پیکربندی Log4j 2 برای فشرده‌سازی لاگ‌ها را توضیح خواهیم داد. همچنین با ارائه مثال‌های کاربردی، به شما نشان خواهیم داد که چگونه فایل‌های لاگ خود را به‌صورت خودکار فشرده کرده و از مصرف بیش از حد فضای دیسک جلوگیری کنید.


1. چرا باید از فشرده‌سازی لاگ‌ها استفاده کنیم؟

در پروژه‌های بزرگ و سرویس‌های پرترافیک، لاگ‌ها به سرعت افزایش می‌یابند و فضای زیادی از دیسک را اشغال می‌کنند. برخی از مزایای فشرده‌سازی لاگ‌ها عبارتند از:

خرید سرور مجازی با بهترین قیمت از رادیب، کلیک کنید

  • کاهش حجم فایل‌های لاگ: فایل‌های متنی معمولاً حجم بالایی دارند، اما با فشرده‌سازی می‌توان حجم آن‌ها را تا 90% کاهش داد.
  • مدیریت بهینه فضای ذخیره‌سازی: باعث کاهش نیاز به فضای دیسک و بهینه‌سازی عملکرد سیستم می‌شود.
  • سرعت بالاتر در انتقال و پردازش لاگ‌ها: فایل‌های فشرده سریع‌تر منتقل و پردازش می‌شوند.

2. معرفی RollingFileAppender در Log4j 2

برای مدیریت حجم لاگ‌ها در Log4j 2، از RollingFileAppender استفاده می‌شود. این Appender اجازه می‌دهد که فایل‌های لاگ پس از رسیدن به یک اندازه مشخص یا پس از یک دوره زمانی خاص، آرشیو شده و به‌طور خودکار فشرده شوند.

نکته: فرمت‌های رایج فشرده‌سازی شامل ZIP و GZ هستند که در Log4j پشتیبانی می‌شوند.


3. تنظیمات Log4j 2 برای فشرده‌سازی لاگ‌ها

برای فشرده‌سازی لاگ‌ها، باید RollingFileAppender را در log4j2.xml پیکربندی کنیم. در ادامه یک نمونه پیکربندی کامل ارائه شده است:

ثبت آنی دامنه با سه کلیک ساده، در رادیب، کلیک کنید

نمونه تنظیمات در log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <!-- تعریف RollingFileAppender برای مدیریت و فشرده‌سازی لاگ‌ها -->
        <RollingFile name="RollingFileAppender"
                     fileName="logs/app.log"
                     filePattern="logs/archive/app-%d{yyyy-MM-dd}.log.gz">
            <PatternLayout>
                <Pattern>%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %logger{36} - %msg%n</Pattern>
            </PatternLayout>
            <Policies>
                <!-- فشرده‌سازی لاگ‌ها پس از رسیدن به حجم 10MB -->
                <SizeBasedTriggeringPolicy size="10MB"/>
                <!-- فشرده‌سازی لاگ‌ها به‌صورت روزانه -->
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
            </Policies>
        </RollingFile>
    </Appenders>

    <Loggers>
        <Root level="info">
            <AppenderRef ref="RollingFileAppender"/>
        </Root>
    </Loggers>
</Configuration>
XML

توضیحات پیکربندی:

  1. RollingFileAppender: این Appender فایل لاگ اصلی را ایجاد کرده و در صورت لزوم، آن را آرشیو و فشرده می‌کند.
  2. filePattern: مشخص می‌کند که فایل‌های آرشیو به فرمت app-YYYY-MM-DD.log.gz ذخیره شوند.
  3. SizeBasedTriggeringPolicy: تعیین می‌کند که لاگ‌ها بعد از رسیدن به 10 مگابایت آرشیو شوند.
  4. TimeBasedTriggeringPolicy: مشخص می‌کند که هر روز یک‌بار یک فایل لاگ جدید ایجاد شده و فایل قبلی آرشیو شود.

4. تست پیکربندی با یک برنامه جاوا

حالا که پیکربندی را انجام دادیم، یک برنامه جاوا برای تولید لاگ‌ها و تست فشرده‌سازی اجرا می‌کنیم:

خرید هاست cPanel و DirectAdmin با بهترین قیمت از رادیب، کلیک کنید

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class LogCompressionTest {
    private static final Logger logger = LogManager.getLogger(LogCompressionTest.class);

    public static void main(String[] args) {
        for (int i = 0; i < 10000; i++) {
            logger.info("این یک لاگ تستی شماره " + i + " است.");
        }
        System.out.println("لاگ‌ها تولید شدند. لطفاً فولدر logs را بررسی کنید.");
    }
}
Java

مراحل اجرا:

  1. کد بالا را در یک پروژه جاوا اجرا کنید.
  2. مشاهده کنید که فایل logs/app.log ایجاد شده و داده‌ها در آن نوشته می‌شوند.
  3. بعد از رسیدن حجم لاگ‌ها به ۱۰ مگابایت یا پایان روز، فایل لاگ جدید ایجاد شده و فایل قبلی با فرمت GZ فشرده می‌شود.

5. تنظیمات پیشرفته (اختیاری)

۵.۱. فشرده‌سازی در فرمت ZIP

اگر به‌جای GZ بخواهید از ZIP استفاده کنید، می‌توانید مقدار filePattern را تغییر دهید:

filePattern="logs/archive/app-%d{yyyy-MM-dd}.zip"
XML

۵.۲. حذف لاگ‌های قدیمی به‌صورت خودکار

اگر بخواهید لاگ‌های قدیمی‌تر از ۳۰ روز به‌صورت خودکار حذف شوند، می‌توانید از DefaultRolloverStrategy استفاده کنید:

<DefaultRolloverStrategy max="30"/>
XML

6. نتیجه‌گیری

در این مقاله، به‌طور کامل نحوه پیکربندی Log4j 2 برای فشرده‌سازی لاگ‌ها را بررسی کردیم. شما یاد گرفتید که چگونه RollingFileAppender را تنظیم کنید تا به‌طور خودکار فایل‌های لاگ را فشرده و آرشیو کند. همچنین چندین مثال از پیکربندی XML و برنامه جاوا ارائه شد تا این مفاهیم را بهتر درک کنید.

پیشنهاد ما:

 اگر پروژه شما لاگ‌های زیادی تولید می‌کند، حتماً از فشرده‌سازی لاگ‌ها برای بهینه‌سازی فضای ذخیره‌سازی استفاده کنید.
 می‌توانید سیاست‌های پیشرفته مانند حذف خودکار لاگ‌های قدیمی را نیز اضافه کنید.

سؤال یا نظری دارید؟ در بخش تیکت های رادیب با کارشناسان ما در میان بگذارید! تا راهنمایی دقیق تری از رادیب بگیرید.

Var dette svaret til hjelp? 66 brukere syntes dette svaret var til hjelp (66 Stemmer)