มีคำตอบมากมาย แต่ไม่มีใครพูดถึงนักตกแต่ง ดังนั้นนี่คือของฉัน
เพราะมันง่ายกว่าเยอะ
ไม่จำเป็นต้องนำเข้าอะไรเลยหรือไม่ต้องเขียนคลาสย่อยใด ๆ :
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import logging
NO_COLOR = "\33[m"
RED, GREEN, ORANGE, BLUE, PURPLE, LBLUE, GREY = \
map("\33[%dm".__mod__, range(31, 38))
logging.basicConfig(format="%(message)s", level=logging.DEBUG)
logger = logging.getLogger(__name__)
# the decorator to apply on the logger methods info, warn, ...
def add_color(logger_method, color):
def wrapper(message, *args, **kwargs):
return logger_method(
# the coloring is applied here.
color+message+NO_COLOR,
*args, **kwargs
)
return wrapper
for level, color in zip((
"info", "warn", "error", "debug"), (
GREEN, ORANGE, RED, BLUE
)):
setattr(logger, level, add_color(getattr(logger, level), color))
# this is displayed in red.
logger.error("Launching %s." % __file__)
ชุดนี้มีข้อผิดพลาดเป็นสีแดงข้อความดีบั๊กเป็นสีน้ำเงินและอื่น ๆ ชอบถามในคำถาม
เราสามารถปรับเสื้อคลุมเพื่อใช้ในการcolor
โต้แย้งกับ dynamicaly ตั้งค่าสีของข้อความโดยใช้logger.debug("message", color=GREY)
แก้ไข: ดังนั้นนี่คือมัณฑนากรที่ดัดแปลงเพื่อตั้งค่าสีในขณะใช้งานจริง:
def add_color(logger_method, _color):
def wrapper(message, *args, **kwargs):
color = kwargs.pop("color", _color)
if isinstance(color, int):
color = "\33[%dm" % color
return logger_method(
# the coloring is applied here.
color+message+NO_COLOR,
*args, **kwargs
)
return wrapper
# blah blah, apply the decorator...
# this is displayed in red.
logger.error("Launching %s." % __file__)
# this is displayed in blue
logger.error("Launching %s." % __file__, color=34)
# and this, in grey
logger.error("Launching %s." % __file__, color=GREY)