AzLearn

تمرين إعادة البناء

عداد مستويات السجلات

احسب مستويات INFO وWARNING وERROR داخل ملف سجلات نصي.

python ~20 دقيقة متوسط
أعد بناء الكود Rebuild

هذا هو الكود. اكتبه بنفسك.

الكود المرجعي
import argparse
import re
from collections import Counter
from pathlib import Path


LEVEL_RE = re.compile(r"\b(DEBUG|INFO|WARNING|WARN|ERROR|CRITICAL)\b", re.IGNORECASE)


def normalize(level: str) -> str:
    upper = level.upper()
    return "WARNING" if upper == "WARN" else upper


def count_levels(path: Path) -> Counter[str]:
    counts: Counter[str] = Counter()
    for line in path.read_text(encoding="utf-8", errors="replace").splitlines():
        match = LEVEL_RE.search(line)
        if match:
            counts[normalize(match.group(1))] += 1
    return counts


def main() -> None:
    parser = argparse.ArgumentParser(description="Count log levels in a text file.")
    parser.add_argument("log_file", type=Path)
    args = parser.parse_args()

    counts = count_levels(args.log_file)
    for level in ["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"]:
        print(f"{level}: {counts[level]}")


if __name__ == "__main__":
    main()
اكتب هنا