TheProgrammer نشر 3 نوفمبر 2015 أرسل تقرير نشر 3 نوفمبر 2015 أُلاحظ عند استخدام تطبيق Mono أن مخرجات الأخطاء تكون ملونة فمثلا رسائل التنقيح باللون الأصفر والأخطاء بالأحمر وهكذا..فهل يمكن تلوين مخرجات وحدة logging في بايثون كما في Mono؟ اقتباس
0 هشام رزق الله نشر 3 نوفمبر 2015 أرسل تقرير نشر 3 نوفمبر 2015 لديك خيارين لتلوين ناتج سجلات بايثون، فإما أن تقوم باستخدام مكتبة للتلوين أو أن تقوم بكتابة شيفرات التلوين بنفسك.يمكنك على سبيل المثال استخدام مكتبة colorlog التي يمكن تثبيتها عن طريق PyPI، وهذا مثال على استخدام هذه المكتبة لتلوين ناتج السجلات التنقيح:import logging LOG_LEVEL = logging.DEBUG LOGFORMAT = " %(log_color)s%(levelname)-8s%(reset)s | %(log_color)s%(message)s%(reset)s" from colorlog import ColoredFormatter logging.root.setLevel(LOG_LEVEL) formatter = ColoredFormatter(LOGFORMAT) stream = logging.StreamHandler() stream.setLevel(LOG_LEVEL) stream.setFormatter(formatter) log = logging.getLogger('pythonConfig') log.setLevel(LOG_LEVEL) log.addHandler(stream) log.debug("A quirky message only developers care about") log.info("Curious users might want to know this") log.warn("Something is wrong and any user should be informed") log.error("Serious stuff, this is red for a reason") log.critical("OH NO everything is on fire")سيكون الناتج كالتالي:وهنالك مكتبات أخرى لتلوين الناتج مثل مكتبة coloredlogs ...إلخأما لو أردت استخدام شيفرات برمجية لتلوين ناتج عمليات التنقيح في بايثون فيمكنك كتابة شيفرة برمجية كهذه:BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE = range(8) #The background is set with 40 plus the number of the color, and the foreground with 30 #These are the sequences need to get colored ouput RESET_SEQ = "\033[0m" COLOR_SEQ = "\033[1;%dm" BOLD_SEQ = "\033[1m" def formatter_message(message, use_color = True): if use_color: message = message.replace("$RESET", RESET_SEQ).replace("$BOLD", BOLD_SEQ) else: message = message.replace("$RESET", "").replace("$BOLD", "") return message COLORS = { 'WARNING': YELLOW, 'INFO': WHITE, 'DEBUG': BLUE, 'CRITICAL': YELLOW, 'ERROR': RED } class ColoredFormatter(logging.Formatter): def __init__(self, msg, use_color = True): logging.Formatter.__init__(self, msg) self.use_color = use_color def format(self, record): levelname = record.levelname if self.use_color and levelname in COLORS: levelname_color = COLOR_SEQ % (30 + COLORS[levelname]) + levelname + RESET_SEQ record.levelname = levelname_color return logging.Formatter.format(self, record)ولاستخدامها يجب عليك إنشاء صنف خاص بك للسجلات:# Custom logger class with multiple destinations class ColoredLogger(logging.Logger): FORMAT = "[$BOLD%(name)-20s$RESET][%(levelname)-18s] %(message)s ($BOLD%(filename)s$RESET:%(lineno)d)" COLOR_FORMAT = formatter_message(FORMAT, True) def __init__(self, name): logging.Logger.__init__(self, name, logging.DEBUG) color_formatter = ColoredFormatter(self.COLOR_FORMAT) console = logging.StreamHandler() console.setFormatter(color_formatter) self.addHandler(console) return logging.setLoggerClass(ColoredLogger)المصدر اقتباس
السؤال
TheProgrammer
أُلاحظ عند استخدام تطبيق Mono أن مخرجات الأخطاء تكون ملونة فمثلا رسائل التنقيح باللون الأصفر والأخطاء بالأحمر وهكذا..
فهل يمكن تلوين مخرجات وحدة logging في بايثون كما في Mono؟
1 جواب على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.