أضف الألوان إلى إخراج وحدة logging
بيثون.
يتطلب ColorLog حاليًا Python 3.6 أو أعلى. الإصدارات القديمة (أقل من 5.xx) تدعم Python 2.6 وما فوق.
يتم تضمين Colorama كاعتماد مطلوب وتهيئة عند استخدام ColorLog على Windows.
تبلغ هذه المكتبة أكثر من عقد من الزمان ويدعم مجموعة واسعة من إصدارات Python لمعظم حياتها ، مما جعلها مكتبة صعبة لإضافة ميزات جديدة إليها. قد يكسر Colorlog 6 توافقًا للخلف بحيث يمكن إضافة ميزات أحدث بسهولة أكبر ، ولكن قد لا تقبل جميع التغييرات أو طلبات الميزات. قد يقبل ColorLog 4 إبعاد الخلل الأساسي ولكن لا ينبغي اعتباره محافظًا بنشاط ولن يقبل أي تغييرات رئيسية أو ميزات جديدة.
التثبيت من PYPI مع:
pip install colorlog
توفر العديد من توزيعات Linux حزمًا رسمية (Debian و Arch و Fedora و Gentoo و Opensuse و Ubuntu) ، والآخرون قد قدموا حزمًا (منافذ BSD ، كوندا).
import colorlog
handler = colorlog . StreamHandler ()
handler . setFormatter ( colorlog . ColoredFormatter (
'%(log_color)s%(levelname)s:%(name)s:%(message)s' ))
logger = colorlog . getLogger ( 'example' )
logger . addHandler ( handler )
يأخذ الفئة ColoredFormatter
في العديد من الحجج:
format
: سلسلة التنسيق المستخدمة لإخراج الرسالة (مطلوب).datefmt
: تنسيق تاريخ اختياري تم تمريره إلى الفئة الأساسية. انظر logging.Formatter
.reset
: يضيف ضمنيًا رمز إعادة تعيين اللون إلى إخراج الرسالة ، ما لم ينتهي الإخراج بالفعل مع واحد. الافتراضات إلى True
.log_colors
: رسم خرائط لأسماء مستوى السجلات لأسماء الألوان. يمكن العثور على الإعدادات الافتراضية في colorlog.default_log_colors
، أو المثال أدناه.secondary_log_colors
: رسم خرائط للأسماء إلى تعيينات نمط log_colors
، وتحديد ألوان إضافية يمكن استخدامها في سلاسل التنسيق. انظر أدناه للحصول على مثال.style
: متوفر على Python 3.2 وما فوق. انظر logging.Formatter
.يمكن تحديد رموز هروب الألوان بناءً على مستوى سجلات السجل ، عن طريق إضافة معلمات إلى سلسلة التنسيق:
log_color
: إرجاع اللون المرتبط بمستوى السجلات.<name>_log_color
: إرجاع لون آخر استنادًا إلى مستوى السجلات إذا كان لدى Formatter ألوان ثانوية تم تكوينها (انظر secondary_log_colors
أدناه). يمكن استخدام رموز الهروب المتعددة دفعة واحدة من خلال الانضمام إليها مع فواصل عند تكوين اللون لمستوى السجل (ولكن لا يمكن استخدامها مباشرة في سلسلة التنسيق). على سبيل المثال ، ستستخدم black,bg_white
رموز الهروب للنص الأسود على خلفية بيضاء.
يتم توفير رموز الهروب التالية للاستخدام في سلسلة التنسيق:
{color}
، fg_{color}
، bg_{color}
: ألوان المقدمة والخلفية.bold
، bold_{color}
، fg_bold_{color}
، bg_bold_{color}
: ألوان Bold/Bright.thin
، thin_{color}
، fg_thin_{color}
: ألوان رقيقة (تعتمد على الطرف).reset
: مسح جميع التنسيقات (كل من ألوان المقدمة والخلفية).أسماء الألوان المتاحة هي:
black
red
green
yellow
blue
،purple
cyan
white
يمكنك أيضًا استخدام ألوان "مشرقة". هذه ليست رموز ANSI قياسية ، ودعم هذه تختلف اختلافًا بعنف عبر المحطات المختلفة.
light_black
light_red
light_green
light_yellow
light_blue
light_purple
light_cyan
light_white
يقوم الرمز التالي بإنشاء ColoredFormatter
للاستخدام في إعداد تسجيل ، باستخدام القيم الافتراضية لكل وسيطة.
from colorlog import ColoredFormatter
formatter = ColoredFormatter (
"%(log_color)s%(levelname)-8s%(reset)s %(blue)s%(message)s" ,
datefmt = None ,
reset = True ,
log_colors = {
'DEBUG' : 'cyan' ,
'INFO' : 'green' ,
'WARNING' : 'yellow' ,
'ERROR' : 'red' ,
'CRITICAL' : 'red,bg_white' ,
},
secondary_log_colors = {},
style = '%'
)
secondary_log_colors
ألوان السجل الثانوية هي وسيلة للحصول على أكثر من لون يتم تحديده بناءً على مستوى السجل. يضيف كل مفتاح في secondary_log_colors
سمة يمكن استخدامها في سلاسل التنسيق (تصبح message
message_log_color
) ، ولها قيمة مقابلة متطابقة في التنسيق مع وسيطة log_colors
.
يسلط المثال التالي الضوء على اسم المستوى باستخدام ألوان السجل الافتراضية ، ويسلط الضوء على الرسالة باللون الأحمر error
ورسائل سجل المستوى critical
.
from colorlog import ColoredFormatter
formatter = ColoredFormatter (
"%(log_color)s%(levelname)-8s%(reset)s %(message_log_color)s%(message)s" ,
secondary_log_colors = {
'message' : {
'ERROR' : 'red' ,
'CRITICAL' : 'red'
}
}
)
dictConfig
logging . config . dictConfig ({
'formatters' : {
'colored' : {
'()' : 'colorlog.ColoredFormatter' ,
'format' : "%(log_color)s%(levelname)-8s%(reset)s %(blue)s%(message)s"
}
}
})
يمكن العثور على قاموس مثال كامل في tests/test_colorlog.py
.
fileConfig
...
[formatters]
keys =color
[formatter_color]
class =colorlog.ColoredFormatter
format =%(log_color)s%(levelname)-8s%(reset)s %(bg_blue)s[%(name)s]%(reset)s %(message)s from fileConfig
datefmt =%m-%d %H:%M:%S
بعد ذلك ، سيتم بعد ذلك استخدام مثيل من coloredFormatter مع هذه الوسائط من قبل أي معالجات تم تكوينها لاستخدام تنسيق color
.
يمكن العثور على تكوين مثال كامل في tests/test_config.ini
.
ستعمل ColoredFormatter مع مستويات السجل المخصصة المضافة مع تسجيل الدخول. logging.addLevelName
:
import logging , colorlog
TRACE = 5
logging . addLevelName ( TRACE , 'TRACE' )
formatter = colorlog . ColoredFormatter ( log_colors = { 'TRACE' : 'yellow' })
handler = logging . StreamHandler ()
handler . setFormatter ( formatter )
logger = logging . getLogger ( 'example' )
logger . addHandler ( handler )
logger . setLevel ( 'TRACE' )
logger . log ( TRACE , 'a message using a custom level' )
تم العثور على اختبارات مماثلة للأمثلة أعلاه في tests/test_colorlog.py
.
Colorlog في وضع الصيانة. أحاول أن أتأكد من نشر bugfixes ، ولكن التوافق مع Python 2.6+ و Python 3+ يجعل هذا قاعدة كود صعبة لإضافة ميزات إليها. لن يتم النظر في أي تغييرات قد تكسر التوافق مع المستخدمين الحاليين.
هناك بعض المكتبات الحديثة لتحسين تسجيل بيثون قد تجدها مفيدة.
يوفر Github قائمة بالمشاريع التي تعتمد على ColorLog.
وشملت بعض المتبنين الأوائل Errbot و Pythran و Zenlog.
حقوق الطبع والنشر (C) 2012-2021 Sam Clements [email protected]
يتم منح الإذن بموجب هذا ، مجانًا ، لأي شخص يحصل على نسخة من هذا البرنامج وملفات الوثائق المرتبطة ("البرنامج") ، للتعامل في البرنامج دون تقييد ، بما في ذلك على سبيل المثال لا الحصر حقوق استخدام ، نسخ ، تعديل ، دمج أو نشر نسخ وتوزيعها و/أو بيعها و/أو بيع نسخ من البرامج ، والسماح للأشخاص الذين يتم تقديم البرنامج لهم للقيام بذلك ، مع مراعاة الشروط التالية:
يجب إدراج إشعار حقوق الطبع والنشر أعلاه وإشعار الإذن هذا في جميع النسخ أو الأجزاء الكبيرة من البرنامج.
يتم توفير البرنامج "كما هو" ، دون أي ضمان من أي نوع ، صريح أو ضمني ، بما في ذلك على سبيل المثال لا الحصر ضمانات القابلية للتسويق واللياقة لغرض معين وعدم الانفجار. لن يكون المؤلفون أو حاملي حقوق الطبع والنشر بأي حال من الأحوال مسؤولاً عن أي مطالبة أو أضرار أو مسؤولية أخرى ، سواء في إجراء عقد أو أضرار أو غير ذلك ، ناشئة عن البرامج أو خارجها أو الاستخدام أو غيرها برمجة.