logging --- تسجيل الأحداث¶
توفر هذه الوحدة مجموعة فرعية خفيفة الوزن من حزمة logging القياسية في Python مُكيّفة لـ MicroPython. وهي تدعم التسجيل وفق المستويات من خلال كائنات Logger ذات أسماء هرمية، ومجموعة صغيرة من المعالِجات (StreamHandler وFileHandler)، والتنسيق بأسلوب printf عبر Formatter، إضافة إلى دوال مساعِدة على مستوى الوحدة تعادل تلك التي تعمل على المُسجِّل الجذر.
تتبع هذه الوحدة واجهة CPython المألوفة بدقة كافية بحيث ينبغي أن تعمل التطبيقات البسيطة المكتوبة للمكتبة القياسية دون أي تعديل. أما المُرشِّحات، وقفل تعدد العمليات، وصيغة ملف الإعداد، ومعظم أصناف المعالِجات فلا تُوفَّر.
ثوابت المستويات¶
الدوال¶
- logging.getLogger(name: str | None = None) Logger¶
تُرجِع
Loggerالمسجَّل تحت الاسم name، وتُنشئه عند أول استخدام. إذا كان name يساويNoneفيُرجَع المُسجِّل الجذر. ويستدعي أول نداء بـname="root"(أو مع ترك name غير محدد) ضمنيًا الدالةbasicConfigلإرفاقStreamHandlerافتراضي يكتب إلىsys.stderr.
- logging.log(level: int, msg: str, *args) None¶
تُسجِّل رسالة عند المستوى level على المُسجِّل الجذر. تُدمَج args داخل msg باستخدام التنسيق بأسلوب printf عبر
%؛ ويُستخدَم وسيط القاموس المفرد كخريطة.
- logging.exception(msg: str, *args, exc_info: bool | BaseException = True) None¶
يعادل
getLogger().exception(msg, *args, exc_info=exc_info). يُسجِّل الرسالة عندERRORويُنسِّق إضافةً إلى ذلك أثر الاستثناء النشط عندما تكون exc_info صادقة. وإذا كانت exc_info نفسها كائنBaseExceptionفيُستخدَم أثر ذلك الاستثناء؛ وإلا فيُرجَع إلىsys.exc_info()عند توافرها.
- logging.shutdown() None¶
تُغلق كل معالِج مُرفَق بكل مُسجِّل معروف وتنسى المُسجِّلات. يُسجَّل تلقائيًا عبر
sys.atexitعند توافر ذلك الخطّاف.
- logging.addLevelName(level: int, name: str) None¶
تربط الاسم النصي name بالمستوى العددي level بحيث يستطيع
Formatterعرضه عبر%(levelname)s.
- logging.basicConfig(filename: str | None = None, filemode: str = 'a', format: str | None = None, datefmt: str | None = None, level: int = WARNING, stream=None, encoding: str = 'UTF-8', force: bool = False) None¶
تُعِدّ المُسجِّل الجذر بمعالِج واحد.
إذا قُدِّم filename فيُنشأ
FileHandlerباستخدام filemode وencoding؛ وإلا فيُستخدَمStreamHandlerيكتب إلى stream (الافتراضيsys.stderr).يُمرَّر format وdatefmt إلى
Formatterجديد.يضبط level مستوى المعالِج ومستوى المُسجِّل الجذر معًا.
إذا كان المُسجِّل الجذر يملك بالفعل معالِجات فلا تفعل هذه الدالة شيئًا، إلا إذا كان force يساوي
True، وفي هذه الحالة تُغلق المعالِجات الموجودة وتُستبدل.
الأصناف¶
- class logging.Logger(name: str, level: int = NOTSET)¶
مُسجِّل ذو اسم. أنشئ المُسجِّلات عبر
getLoggerبدلًا من إنشائها مباشرةً، حتى تتمكنgetLoggerمن إرجاع النسخة نفسها للاسم نفسه.- handlers: list¶
قائمة نُسخ
Handlerالمُرفَقة بهذا المُسجِّل. وعندما تكون فارغة، تُرسَل الرسائل إلى معالِجات المُسجِّل الجذر.
- isEnabledFor(level: int) bool¶
تُرجِع
Trueإذا كانت رسالة عند المستوى level ستُعالَج بواسطة هذا المُسجِّل.
- getEffectiveLevel() int¶
تُرجِع أول قيمة غير صفرية من بين: مستوى هذا المُسجِّل، أو مستوى المُسجِّل الجذر، أو
WARNING.
- log(level: int, msg: str, *args) None¶
تُسجِّل msg عند المستوى level. تُدمَج args داخل msg باستخدام عامل
%؛ وإذا كان الوسيط الموضعي الأول قاموسًا فيُستخدَم كخريطة.
- class logging.Handler(level: int = NOTSET)¶
الصنف الأساس لجميع المعالِجات. تُنفِّذ الأصناف الفرعية
emit().- close() None¶
يحرِّر الموارد التي يحتفظ بها المعالِج. تُستدعى من
shutdownومنFileHandlerعند إغلاقه.
- class logging.StreamHandler(stream=None)¶
معالِج يكتب السجلات المُنسَّقة، متبوعةً بـ
self.terminator(وقيمته الافتراضية"\n")، إلى stream. القيمة الافتراضية لـ stream هيsys.stderr.- stream¶
كائن مجرى الوجهة.
- class logging.FileHandler(filename: str, mode: str = 'a', encoding: str = 'UTF-8')¶
صنف فرعي من
StreamHandlerيفتح filename بالنمط mode والترميز encoding المُعطَيين ويكتب السجلات المُنسَّقة إليه. يُغلق الملف الأساسي عندclose().
- class logging.Formatter(fmt: str | None = None, datefmt: str | None = None)¶
يعرض نُسخ
LogRecordكسلاسل نصية.fmt قالب بأسلوب printf. المفاتيح المُتعرَّف عليها هي
%(name)sو%(message)sو%(msecs)dو%(asctime)sو%(levelname)s. وعند تركه غير مضبوط فقيمته الافتراضية"%(levelname)s:%(name)s:%(message)s".datefmt هو قالب
time.strftimeالمُستخدَم لعرض%(asctime)s. قيمته الافتراضية"%Y-%m-%d %H:%M:%S".- formatTime(datefmt: str, record: LogRecord) str | None¶
تُنسِّق
record.ctباستخدامtime.strftimeوdatefmt. وتُرجِعNoneعلى المنصات التي لا تتوافر فيهاtime.strftime.
- format(record: LogRecord) str¶
تعرض record. إذا كان القالب يستخدم
asctime، فتُستدعىformatTime()أولًا لتعبئةrecord.asctime.