MODULE 10 - إدارة الاستثناءات وتسجيل الدخول
مرحبًا بكم في الوحدة 10! 📋
تطبيقك يواجه خطأ... ماذا يرى المستخدم؟ تتبع مكدس Java غير قابل للقراءة؟ هذه الوحدة تعلمك كيفية إدارة الأخطاء بشكل صحيح وتتبع ما يحدث في تطبيقك.
🎓 أهداف التعلم
في نهاية هذه الوحدة، ستكون قادرًا على:
- ✅ إنشاء استثناءات مخصصة
- ✅ استخدام @ControllerAdvice لإدارة شاملة
- ✅ إرجاع ردود خطأ منظمة
- ✅ تسجيل الدخول بفعالية مع SLF4J
- ✅ تكوين Logback لبيئات مختلفة
📚 المتطلبات الأساسية
قبل البدء في هذه الوحدة، يجب أن تكون قد:
- ✅ أكملت الوحدات من 1 إلى 9
- ✅ أنشأت وحدات تحكم REST
- ✅ فهمت رموز HTTP (4xx، 5xx)
- ✅ لديك معرفة بالاستثناءات في Java
🗺️ خطة الوحدة
الجزء النظري (4 فصول)
الفصل 1: إدارة الاستثناءات
المدة: 45 دقيقة
المحتوى:
- استثناءات مخصصة
- تسلسل هرمي للاستثناءات
- أفضل الممارسات
- Checked vs Unchecked
لماذا هو مهم؟ أساس إدارة الأخطاء
الفصل 2: @ControllerAdvice
المدة: 1 ساعة
المحتوى:
- @ControllerAdvice و@RestControllerAdvice
- @ExceptionHandler
- ردود خطأ موحدة
- ProblemDetail (RFC 7807)
- ResponseStatusException
لماذا هو مهم؟ إدارة مركزية للأخطاء
الفصل 3: تسجيل الدخول مع SLF4J
المدة: 45 دقيقة
المحتوى:
- SLF4J وواجهات تسجيل الدخول
- مستويات السجل (TRACE → ERROR)
- أنماط المسجل
- MDC (Mapped Diagnostic Context)
- Lombok @Slf4j
لماذا هو مهم؟ تشخيص المشاكل
الفصل 4: تكوين Logback
المدة: 45 دقيقة
المحتوى:
- logback-spring.xml
- Appenders (Console, File, Rolling)
- الأنماط والتنسيق
- ملفات تعريف Spring
- سجلات JSON للإنتاج
لماذا هو مهم؟ تكوين احترافي
الجزء العملي (2 تدريبات)
TP10.1: إدارة مركزية للأخطاء
المدة: 1 ساعة و30 دقيقة
الهدف: تنفيذ نظام كامل لإدارة الأخطاء
ستقوم بـ:
- إنشاء استثناءات خاصة بالأعمال
- تنفيذ GlobalExceptionHandler
- توحيد ردود الخطأ
- اختبار مع سيناريوهات مختلفة
TP10.2: نظام تسجيل الدخول
المدة: 1 ساعة و30 دقيقة
الهدف: تكوين تسجيل دخول احترافي
ستقوم بـ:
- تكوين Logback
- إنشاء سجلات لكل بيئة
- تنفيذ MDC للتتبع
- سجلات الملفات مع التدوير
📊 المدة الإجمالية
| النوع | المدة |
|---|---|
| النظرية | 3 ساعات و15 دقيقة (4 فصول) |
| العملية | 3 ساعات (2 تدريبات) |
| الإجمالي | 6 ساعات و15 دقيقة (~2 جلسات) |
🎯 ما ستفهمه
قبل هذه الوحدة
// خطأ غير مُدار 😰
@GetMapping("/{id}")
public User getUser(@PathVariable Long id) {
return userRepository.findById(id).orElseThrow();
// → 500 Internal Server Error مع تتبع مكدس كامل!
}
// لا توجد سجلات
public void processOrder(Order order) {
// هل يعمل؟ هل يفشل؟ لا فكرة...
}
بعد هذه الوحدة
// إدارة نظيفة للأخطاء ✅
@GetMapping("/{id}")
public User getUser(@PathVariable Long id) {
return userService.findById(id);
// → 404 {"type": "user-not-found", "title": "User not found", ...}
}
// تسجيل منظم
@Slf4j
public class OrderService {
public void processOrder(Order order) {
log.info("Processing order {} for user {}", order.getId(), order.getUserId());
// ...
log.debug("Order total calculated: {}", total);
}
}
رد خطأ نظيف:
{
"type": "https://api.example.com/errors/user-not-found",
"title": "User Not Found",
"status": 404,
"detail": "User with ID 123 was not found",
"instance": "/api/users/123",
"timestamp": "2024-01-15T10:30:00Z"
}
🚀 لماذا هذه الوحدة أساسية
1. تجربة المستخدم
بدون إدارة:
- تتبع مكدس مكشوف للعميل 😱
- رسائل خطأ غامضة
- صعوبة في التصحيح على الجانب الأمامي
مع الإدارة:
- رسائل واضحة ومترجمة
- رموز خطأ موثقة
- تنسيق JSON موحد
2. التصحيح في الإنتاج
بدون سجلات:
- "التطبيق تعطل الليلة الماضية"
- "لا فكرة عما حدث"
- مستحيل إعادة الإنتاج
مع السجلات:
- تتبع كامل للأحداث
- سياق المستخدم (MDC)
- تصفية حسب المستوى
3. الامتثال للمعايير
RFC 7807 - تفاصيل المشكلة لواجهات برمجة التطبيقات HTTP
├── تنسيق موحد
├── قابلية التشغيل البيني
└── توثيق تلقائي
🗺️ التقدم في التدريب
الوحدة 10 = تطبيق جاهز للإنتاج!
📖 كيفية التعامل مع هذه الوحدة
التقدم الموصى به
- الفصل 1 → فهم استثناءات Java
- الفصل 2 + TP10.1 → تنفيذ الإدارة الشاملة
- الفصل 3 → تعلم تسجيل الدخول
- الفصل 4 + TP10.2 → تكوين Logback
✅ التقييم الذاتي
قبل البدء، أجب:
- هل تعرف كيفية إنشاء استثناء مخصص؟ ☐ نعم ☐ لا
- هل تعرف @ControllerAdvice؟ ☐ نعم ☐ لا
- هل تستخدم System.out.println للتصحيح؟ ☐ نعم ☐ لا
- هل تعرف كيفية تكوين Logback؟ ☐ نعم ☐ لا
إذا أجبت "لا" في أي مكان، هذه الوحدة لك!
🎯 الخطوة التالية
جاهز لاحتراف إدارة الأخطاء الخاصة بك؟
➡️ ابدأ مع الفصل 1: إدارة الاستثناءات