E2 — محلّل السجلات (مرشحات وعدّادات بسيطة)
حلّلوا مصفوفة موجودة في الذاكرة من أسطر السجل، وطبّقوا التصفية بحسب المستوى أو الكلمة المفتاحية، وعدّوا الأحداث باستخدام Map. حافظوا على البساطة وسهولة القراءة
E2 — محلّل السجلات (مرشحات وعدّادات بسيطة) درس مجاني في JavaScript Academy على CoddyKit. هذا هو الدرس 2 من أصل 3. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في JavaScript Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة JavaScript Academy 3 دروس في المجموع.
ما سنبنيه
الهدف: تحليل السجلات في الذاكرة.
- مثّل الأسطر كسلاسل نصية صغيرة
- صفِّ حسب المستوى أو الكلمة المفتاحية
- أحصِ باستخدام Map
- أبقِ الدوال قصيرة وواضحة

البيانات والمحلّل
أنشئ بنية بسيطة لكل سطر: الوقت والمستوى والنص. وهذا يكفي لعمليات التصفية والعدّ.
// Simulated log lines (time level message)
const LINES = [
"10:00 INFO Start app",
"10:01 WARN Low memory",
"10:02 INFO User login /home",
"10:03 ERROR DB timeout",
"10:04 INFO User login /products",
"10:05 ERROR Network fail",
"10:06 WARN Retry request"
];
// Tiny parser: returns { time, level, text }
function parseLine(line) {
// split on spaces, compact, then rebuild pieces
const parts = line.trim().split(/\\s+/);
if (parts.length < 3) return null;
const time = parts[0];
const level = parts[1];
const text = parts.slice(2).join(" ");
return { time: time, level: level, text: text };
}
console.log("parsed:", parseLine(LINES[2]));
أساسيات التصفية
اكتب دوال تصفية صغيرة لكل سؤال شائع. فالشيفرة القصيرة سهلة القراءة أفضل من الشيفرة الذكية المعقدة.
// Filter by level or by keyword (case-sensitive for simplicity)
function filterByLevel(lines, want) {
const out = [];
for (const line of lines) {
const p = parseLine(line);
if (p && p.level === want) out.push(p);
}
return out;
}
function filterByKeyword(lines, word) {
const out = [];
for (const line of lines) {
const p = parseLine(line);
if (p && p.text.indexOf(word) !== -1) out.push(p);
}
return out;
}
console.log("ERRORs:", filterByLevel(LINES, "ERROR").length);
console.log("login :", filterByKeyword(LINES, "login").length);
العدّ باستخدام Map
استخدم Map للعدّ؛ فهو يتيح تحديثات سريعة وقراءة سهلة لكل مفتاح.
// Count how many lines per level
function countByLevel(lines) {
const counts = new Map();
for (const line of lines) {
const p = parseLine(line);
if (!p) continue;
const old = counts.get(p.level) || 0;
counts.set(p.level, old + 1);
}
return counts;
}
const c = countByLevel(LINES);
console.log("INFO :", c.get("INFO"));
console.log("WARN :", c.get("WARN"));
console.log("ERROR:", c.get("ERROR"));
مثال على أعلى N
نفّذ استخراجًا صغيرًا من السلاسل النصية ورتّب النتائج باستخدام Map للعدّ. أبقِ قواعد التحليل بسيطة.
// Extract a path after "User login " and rank by frequency
function topLoginPaths(lines, k) {
const freq = new Map();
for (const line of lines) {
const p = parseLine(line);
if (!p) continue;
const mark = "User login ";
const idx = p.text.indexOf(mark);
if (idx !== -1) {
const path = p.text.slice(idx + mark.length).trim();
const old = freq.get(path) || 0;
freq.set(path, old + 1);
}
}
// turn into array and sort descending by count
const arr = Array.from(freq.entries());
arr.sort(function (a, b) { return b[1] - a[1]; });
return arr.slice(0, k);
}
console.log("top paths:", topLoginPaths(LINES, 3));
إرشادات للمبتدئين
نصائح:
- أنشئ محلّلًا صغيرًا أولًا.
- اكتب مساعدات تصفية صغيرة لكل سؤال.
- أحصِ باستخدام Map.
- فضّل السلاسل النصية البسيطة والحلقات الواضحة للمبتدئين.

اختبار العدّ باستخدام Map
تحقّق سريع: بنية العدّ.

مراجعة
مراجعة: حلّل البيانات إلى بنية صغيرة، وصفِّها حسب المستوى أو الكلمة المفتاحية، وأحصِ باستخدام Map. اجعل كل مساعد قصيرًا وواضحًا.

الأسئلة الشائعة
هل درس «E2 — محلّل السجلات (مرشحات وعدّادات بسيطة)» مجاني؟
نعم — نص درس «E2 — محلّل السجلات (مرشحات وعدّادات بسيطة)» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة JavaScript Academy، انتقل إلى CoddyKit PRO. تتضمن دورة JavaScript Academy 3 دروس في المجموع.
ماذا ستتعلم في «E2 — محلّل السجلات (مرشحات وعدّادات بسيطة)»؟
حلّلوا مصفوفة موجودة في الذاكرة من أسطر السجل، وطبّقوا التصفية بحسب المستوى أو الكلمة المفتاحية، وعدّوا الأحداث باستخدام Map. حافظوا على البساطة وسهولة القراءة تتمرن على JavaScript Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ JavaScript Academy؟
لا تُشترط خبرة سابقة. JavaScript Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 3.
كم من الوقت يستغرق درس «E2 — محلّل السجلات (مرشحات وعدّادات بسيطة)»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس JavaScript Academy هذا؟
نعم. كل درس في JavaScript Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- E1 — مقيّم التعبيرات (الجزء 1: + و- من اليسار إلى اليمين)
- E2 — محلّل السجلات (مرشحات وعدّادات بسيطة)
- E3 — مجموعة أو طابور Promise (التزامن غير المتزامن)