Có hàng tấn phản hồi. Nhưng không ai nói về trang trí. Vậy đây là của tôi.
Bởi vì nó đơn giản hơn rất nhiều.
Không cần nhập bất cứ thứ gì, cũng không cần viết bất kỳ lớp con nào:
#!/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__)
Điều này đặt các lỗi màu đỏ, thông báo gỡ lỗi màu xanh lam, v.v. Giống như hỏi trong câu hỏi.
Thậm chí chúng ta có thể điều chỉnh trình bao bọc để đưa ra một color
đối số thành động lực đặt màu của thông điệp bằng cách sử dụnglogger.debug("message", color=GREY)
EDIT: Vì vậy, đây là trình trang trí phù hợp để đặt màu khi chạy:
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)