مراقبة وتسجيل تطبيقات Java: دليل شامل 2024

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

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

ابدأ الدورة

تطبيق Java الخاص بك يعمل بشكل أعمى؟ حان الوقت لإصلاح ذلك

\n\n

تخيل: تقوم بتشغيل إصدار جديد من الخدمة المصغرة، كل شيء يعمل بشكل رائع على جهازك المحلي، وتمر الاختبارات. بعد ساعة - انهيار في بيئة الإنتاج. أين تبحث عن السبب؟ بدون مراقبة وتسجيل مناسبين لتطبيقات Java، ستخمن في الظلام، وتفقد المال والأعصاب.

\n\n

في هذه المقالة، سنشرح كيفية تحويل تطبيقك من "صندوق أسود" إلى نظام شفاف. ستتعلم كيفية إعداد التسجيل في Java باستخدام المكتبات الحديثة، وجمع المقاييس، وبناء نظام مراقبة كامل. هيا بنا!

\n\n

لماذا تعتبر مراقبة وتسجيل تطبيقات Java أمرًا لا غنى عنه

\n\n

تطوير Java الحديث ليس مجرد كتابة كود. إنه إدارة أنظمة موزعة معقدة، وخدمات مصغرة، وحاويات. بدون أدوات المراقبة (observability)، لن تتمكن من:

\n\n
    \n
  • العثور بسرعة على أسباب الأعطال
  • \n
  • التنبؤ بالحمل
  • \n
  • تتبع الأداء
  • \n
  • الامتثال لاتفاقيات مستوى الخدمة (SLA) مع العملاء
  • \n
\n\n

تمنحك مراقبة تطبيقات Java المُعدة بشكل صحيح قدرة خارقة - رؤية ما يحدث داخل الكود في الوقت الفعلي. وهذا ليس ترفًا، بل ضرورة.

\n\n

التسجيل في Java: اختيار مجموعة التقنيات

\n\n

لماذا System.out.println() هو شر

\n\n

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

\n\n
    \n
  • لا توجد مستويات تسجيل (debug, info, error)
  • \n
  • لا يمكن ضبط الإخراج بمرونة
  • \n
  • يصعب تحليله بواسطة الأنظمة الآلية
  • \n
  • الكتابة المتزامنة تبطئ التطبيق
  • \n
\n\n

انسَ هذا الأسلوب. المحترفون الحقيقيون يستخدمون المكتبات الاحترافية.

\n\n

أفضل خيار: SLF4J + Logback

\n\n

SLF4J (Simple Logging Facade for Java) هو طبقة تجريد تسمح بتوصيل أي تطبيق تسجيل. Logback هو التطبيق الأكثر شيوعًا والأعلى أداءً حاليًا.

\n\n

أضف إلى pom.xml (Maven) أو build.gradle (Gradle):

\n\n
// Maven dependency\n<dependency>\n    <groupId>ch.qos.logback</groupId>\n    <artifactId>logback-classic</artifactId>\n    <version>1.4.14</version>\n</dependency>\n\n// SLF4J API (عادةً ما يأتي مع Logback)\n<dependency>\n    <groupId>org.slf4j</groupId>\n    <artifactId>slf4j-api</artifactId>\n    <version>2.0.9</version>\n</dependency>
\n\n

مثال على إعداد Logback (logback.xml)

\n\n
<configuration>\n    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">\n        <file>logs/app.log</file>\n        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">\n            <fileNamePattern>logs/app-%d{yyyy-MM-dd}.log</fileNamePattern>\n            <maxHistory>30</maxHistory>\n        </rollingPolicy>\n        <encoder>\n            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>\n        </encoder>\n    </appender>\n\n    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">\n        <encoder>\n            <pattern>%d{HH:mm:ss.SSS} %highlight(%-5level) %cyan(%logger{36}) - %msg%n</pattern>\n        </encoder>\n    </appender>\n\n    <root level="info">\n        <appender-ref ref="FILE"/>\n        <appender-ref ref="CONSOLE"/>\n    </root>\n</configuration>
\n\n

كيفية الاستخدام في الكود

\n\n
import org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\n\npublic class OrderService {\n    private static final Logger log = LoggerFactor                

المدونات

توصيات الكتب