0Pricing
Python Academy · درس

التسجيل المنظّم

أصدر سجلات بتنسيق JSON لتكون قابلة للقراءة آلياً

التسجيل المنظّم درس مجاني في Python Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Python Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Python Academy 4 دروس في المجموع.

ما المقصود بالتسجيل المنظّم؟

يصدر التسجيل المنظّم سجلات السجل كبيانات قابلة للقراءة آليًا، مثل JSON، بدلًا من نص حر، مما يسهّل فهرستها والبحث فيها وإنشاء التنبيهات بناءً عليها.

import logging, json

def log_json(level, msg, **kw):
    record = {"level": level, "msg": msg, **kw}
    print(json.dumps(record))

log_json("INFO", "Request received", path="/api/users", method="GET")

منسّق JSON مخصص

أنشئوا فئة فرعية من logging.Formatter لإصدار JSON بدلًا من النص العادي.

import logging, json

class JSONFormatter(logging.Formatter):
    def format(self, record):
        return json.dumps({
            "time": self.formatTime(record),
            "level": record.levelname,
            "name": record.name,
            "msg": record.getMessage(),
        })

handler = logging.StreamHandler()
handler.setFormatter(JSONFormatter())
logging.getLogger().addHandler(handler)

python-json-logger

توفر الحزمة python-json-logger منسّق JSON جاهزًا للاستخدام مع حقول قياسية وإضافية.

# pip install python-json-logger
import logging
from pythonjsonlogger import jsonlogger

logger = logging.getLogger()
handler = logging.StreamHandler()
handler.setFormatter(jsonlogger.JsonFormatter())
logger.addHandler(handler)
logger.info("User created", extra={"user_id": 42})

structlog

‏structlog مكتبة شائعة من جهات خارجية تفصل تجميع السياق عن التنسيق، وتدعم سلاسل المعالجات.

# pip install structlog
import structlog

log = structlog.get_logger()
log = log.bind(request_id="abc123")
log.info("payment_processed", amount=49.99, currency="USD")

ربط السياق باستخدام structlog

يتيح لكم structlog ربط أزواج المفتاح والقيمة بمسجّل لتنتقل إلى جميع الاستدعاءات اللاحقة.

import structlog

log = structlog.get_logger().bind(
    service="auth",
    env="prod"
)
log.warning("login_failed", user="alice", reason="bad_password")
# {service:auth, env:prod, user:alice, reason:bad_password}

إضافة الطوابع الزمنية ومعلومات المستدعي

يمكن للمعالجات إثراء السجلات تلقائيًا. أضيفوا TimeStamper وCallsiteParameterAdder إلى كل سجل.

import structlog

structlog.configure(
    processors=[
        structlog.processors.TimeStamper(fmt="iso"),
        structlog.processors.CallsiteParameterAdder([structlog.processors.CallsiteParameter.FILENAME]),
        structlog.processors.JSONRenderer(),
    ]
)

تسجيل معرّفات الطلبات في تطبيقات الويب

في إطار عمل ويب، اربطوا معرّف الطلب في بداية كل طلب حتى يتضمنه كل سطر سجل أثناء ذلك الطلب.

import structlog

def middleware(request, call_next):
    req_id = request.headers.get("X-Request-Id", generate_id())
    log = structlog.get_logger().bind(request_id=req_id)
    log.info("request_started", path=request.url.path)
    response = call_next(request)
    log.info("request_finished", status=response.status_code)
    return response

تنسيق سجلات ECS

يُعد Elastic Common Schema (ECS) تنسيقًا قياسيًا لسجلات JSON تستخدمه Elastic Stack. استخدموا ecs-logging مع Python.

# pip install ecs-logging
import logging
import ecs_logging

logger = logging.getLogger("app")
handler = logging.StreamHandler()
handler.setFormatter(ecs_logging.StdlibFormatter())
logger.addHandler(handler)
logger.info("Event logged in ECS format")

أنظمة تجميع السجلات

تنتقل سجلات JSON المنظّمة طبيعيًا إلى أدوات التجميع: Elasticsearch/Kibana (ELK) وGrafana Loki وDatadog وAWS CloudWatch Logs Insights.

# Loki query example:
# {app="myservice"} | json | level="ERROR"

# CloudWatch Insights:
# fields @timestamp, level, msg
# | filter level = "ERROR"
# | sort @timestamp desc

تجنّب PII في السجلات

أزيلوا المعلومات الشخصية القابلة للتعرّف قبل التسجيل. استخدموا معالجًا أو مرشّحًا مخصصًا لإخفاء عناوين البريد الإلكتروني والرموز المميزة وكلمات المرور.

import re

def mask_pii(_, __, event_dict):
    msg = event_dict.get("event", "")
    event_dict["event"] = re.sub(
        r"[\w.+-]+@[\w-]+\.[\w.]+", "***@***.***", msg
    )
    return event_dict

المفاضلة بين السجلات المنظّمة وغير المنظّمة

تتميز السجلات المنظّمة بسهولة البحث وإنشاء التنبيهات، لكنها مطوّلة. ادمجوا التسجيل المنظّم في بيئة الإنتاج مع تنسيق سهل القراءة للبشر في بيئة التطوير باستخدام إعداد يعتمد على البيئة.

import structlog, os

if os.getenv("ENV") == "production":
    renderer = structlog.processors.JSONRenderer()
else:
    renderer = structlog.dev.ConsoleRenderer()

structlog.configure(processors=[renderer])

تحقّق سريع

ما الميزة الأساسية لسجلات JSON المنظّمة مقارنةً بسجلات النص العادي؟

مراجعة

يصدر التسجيل المنظّم سجلات JSON على شكل أزواج مفتاح وقيمة. استخدموا JSONFormatter أو python-json-logger أو structlog. واربطوا السياق، مثل معرّف الطلب أو المستخدم، في بداية العملية حتى يحمل كل سطر سجل أثناءها ذلك السياق.

الأسئلة الشائعة

هل درس «التسجيل المنظّم» مجاني؟

نعم — نص درس «التسجيل المنظّم» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Python Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Python Academy 4 دروس في المجموع.

ماذا ستتعلم في «التسجيل المنظّم»؟

أصدر سجلات بتنسيق JSON لتكون قابلة للقراءة آلياً تتمرن على Python Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Python Academy؟

لا تُشترط خبرة سابقة. Python Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «التسجيل المنظّم»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Python Academy هذا؟

نعم. كل درس في Python Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. أساسيات الوحدة logging
  2. المعالجات والمنسّقات والمرشحات
  3. التسجيل المنظّم
  4. تصحيح الأخطاء باستخدام pdb
← العودة إلى Python Academy