Log4j 2 / SLF4J لجافا: دليل شامل مع أمثلة

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

ما هي هذه المكتبة وما فائدتها

\n\n

Log4j 2 و SLF4J هما مكتبتان مترابطتان لتسجيل السجلات في جافا، وتعتبران المعيار الفعلي في عالم التطوير المؤسسي. SLF4J (واجهة تسجيل بسيطة لجافا) هي واجهة (تجريد) توفر API موحد لأطر تسجيل السجلات المختلفة. Log4j 2 هو أحد أقوى وأكثر التطبيقات أداءً لهذه الـ API.

\n\n

ما الفائدة من ذلك؟ تسجيل السجلات هو عملية كتابة معلومات حول تشغيل التطبيق: الأخطاء، التحذيرات، الرسائل الإعلامية، معلومات التصحيح. بدون نظام تسجيل سجلات، يضطر المطورون لاستخدام System.out.println()، مما يؤدي إلى:

\n
    \n
  • عدم القدرة على التحكم في المخرجات بمرونة (تشغيل/إيقاف السجلات لأجزاء مختلفة من التطبيق)
  • \n
  • غياب مستويات التسجيل (INFO, WARN, ERROR, DEBUG)
  • \n
  • مشاكل في الأداء (ربط السلاسل النصية حتى عند تعطيل السجلات)
  • \n
  • غياب تنسيقات المخرجات (التاريخ، الوقت، اسم الفئة، الخيط)
  • \n
\n\n

Log4j 2 يحل كل هذه المشاكل. فهو يدعم التسجيل غير المتزامن، المرشحات، الملحقات (الإخراج إلى ملف، وحدة التحكم، قاعدة بيانات، شبكة)، تدوير السجلات، والعديد من الوظائف المتقدمة الأخرى. SLF4J يسمح بالتبديل من Log4j 2 إلى Logback أو java.util.logging عند الحاجة دون تغيير الكود.

\n\n

التثبيت

\n\n

لمشاريع جافا، يتم التثبيت من خلال أنظمة البناء Maven أو Gradle. على عكس Python (pip) أو Node.js (npm)، في جافا يتم إدارة التبعيات عبر ملفات التكوين.

\n\n

Maven (pom.xml)

\n
<!-- SLF4J API + Log4j 2 كتطبيق -->\n<dependency>\n    <groupId>org.apache.logging.log4j</groupId>\n    <artifactId>log4j-slf4j-impl</artifactId>\n    <version>2.20.0</version>\n</dependency>\n\n<!-- API الرئيسي لـ Log4j 2 (إذا كنت لا تستخدم SLF4J) -->\n<dependency>\n    <groupId>org.apache.logging.log4j</groupId>\n    <artifactId>log4j-core</artifactId>\n    <version>2.20.0</version>\n</dependency>
\n\n

Gradle (build.gradle)

\n
dependencies {\n    implementation 'org.apache.logging.log4j:log4j-slf4j-impl:2.20.0'\n    implementation 'org.apache.logging.log4j:log4j-core:2.20.0'\n}
\n\n

بعد إضافة التبعيات، قم بإنشاء ملف تكوين log4j2.xml في مجلد src/main/resources:

\n
<?xml version="1.0" encoding="UTF-8"?>\n<Configuration status="WARN">\n    <Appenders>\n        <Console name="Console" target="SYSTEM_OUT">\n            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>\n        </Console>\n    </Appenders>\n    <Loggers>\n        <Root level="info">\n            <AppenderRef ref="Console"/>\n        </Root>\n    </Loggers>\n</Configuration>
\n\n

بداية سريعة مع مثال كود

\n\n

قم بإنشاء فئة جافا بسيطة للتوضيح:

\n
import org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\n\npublic class QuickStart {\n    // إنشاء مسجل للفئة الحالية\n    private static final Logger logger = LoggerFactory.getLogger(QuickStart.class);\n\n    public static void main(String[] args) {\n        logger.info("تم تشغيل التطبيق");\n        logger.debug("هذه رسالة تصحيح");\n        logger.warn("تحذير: الموارد تنفد");\n        logger.error("خطأ حرج: {}", "القسمة على صفر");\n\n        try {\n            int result = 10 / 0;\n        } catch (ArithmeticException e) {\n            logger.error("خطأ أثناء الحساب", e);\n        }\n    }\n}
\n\n

سيبدو الإخراج في وحدة التحكم كالتالي:

\n
14:30:15.123 [main] INFO  QuickStart - تم تشغيل التطبيق\n14:30:15.125 [main] WARN  Q                    

توصيات