loglens

لوجز منظمة مع correlation-id للتطبيقات غير المتزامنة

Python 3.12contextvarsFastAPIaiohttppytest

كود المصدر على GitHub

رخصة: MIT

الفكرة

لما تحصل مشكلة في إنتاج FastAPI، أسهل سؤال هو: «إيه الطلب اللي ورا السطر ده؟». من غير معرّف ارتباط يمسك كل اللوجز الناتجة عن نفس الطلب، بتفضل تجمع سطور متبعترة. loglens حلمت الحاجة دي: correlation id واحدة بتتولد للطلب وتتوارث تلقائيًا لأي task بيتعمل منه.

كيف تنتقل القيمة

المعرّف ساكن في contextvars.ContextVar، فده مقصوص على الـ task الحالي ومتوارث لأي task ابن، من غير ما تعدي القيمة بإيدك في كل دالة. مع Middleware قطعنها ASGI خالص، فشغالة في FastAPI و aiohttp وحتى ستارليت لوحدها.

الاعتيماء بالأسرار

الـ redaction شغال افتراضيًا: مفاتيح حساسة (password، token، authorization…) وأشكال معروفة (Bearer، JWTs، مفاتيح خاصة) بتتحجب تلقائيًا من المخرجات. تقدر تعطّله لمّا تكون محتاج تشوف القيم في بيئة متن الآمنة.

الاستخدام

import loglens

loglens.setup()   # JSON في الإنتاج، ملوّن على الطرفية
with loglens.correlation() as cid:
    logger.info("handling request", extra={"path": "/api/users"})

بيئتان سطر واحد: loglens.setup_dev() أو setup_prod()، مع متغيرات بيئة LOGLENS_LEVEL/LOGLENS_FORMAT/LOGLENS_REDACT.