ما هي هذه المكتبة وما فائدتها
\n\nLog4j 2 و SLF4J هما مكتبتان مترابطتان لتسجيل السجلات في جافا، وتعتبران المعيار الفعلي في عالم التطوير المؤسسي. SLF4J (واجهة تسجيل بسيطة لجافا) هي واجهة (تجريد) توفر API موحد لأطر تسجيل السجلات المختلفة. Log4j 2 هو أحد أقوى وأكثر التطبيقات أداءً لهذه الـ API.
\n\nما الفائدة من ذلك؟ تسجيل السجلات هو عملية كتابة معلومات حول تشغيل التطبيق: الأخطاء، التحذيرات، الرسائل الإعلامية، معلومات التصحيح. بدون نظام تسجيل سجلات، يضطر المطورون لاستخدام System.out.println()، مما يؤدي إلى:
- \n
- عدم القدرة على التحكم في المخرجات بمرونة (تشغيل/إيقاف السجلات لأجزاء مختلفة من التطبيق) \n
- غياب مستويات التسجيل (INFO, WARN, ERROR, DEBUG) \n
- مشاكل في الأداء (ربط السلاسل النصية حتى عند تعطيل السجلات) \n
- غياب تنسيقات المخرجات (التاريخ، الوقت، اسم الفئة، الخيط) \n
Log4j 2 يحل كل هذه المشاكل. فهو يدعم التسجيل غير المتزامن، المرشحات، الملحقات (الإخراج إلى ملف، وحدة التحكم، قاعدة بيانات، شبكة)، تدوير السجلات، والعديد من الوظائف المتقدمة الأخرى. SLF4J يسمح بالتبديل من Log4j 2 إلى Logback أو java.util.logging عند الحاجة دون تغيير الكود.
\n\nالتثبيت
\n\nلمشاريع جافا، يتم التثبيت من خلال أنظمة البناء Maven أو Gradle. على عكس Python (pip) أو Node.js (npm)، في جافا يتم إدارة التبعيات عبر ملفات التكوين.
\n\nMaven (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\nGradle (build.gradle)
\ndependencies {\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:
<?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قم بإنشاء فئة جافا بسيطة للتوضيح:
\nimport 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سيبدو الإخراج في وحدة التحكم كالتالي:
\n14:30:15.123 [main] INFO QuickStart - تم تشغيل التطبيق\n14:30:15.125 [main] WARN Q