Nasıl renk Python günlük çıkış yapabilir miyim?
Bir süre önce, renkli çıktı, muhtemelen günlük sistem yüzünden bütün mesajları standardize edildi çünkü) ile Mono bir uygulama gördüm.
Şimdi, Python size bir çok seçenek çıktı özelleştirmek için belirlemenizi sağlar logging
modülü vardır. Yani, benzer Python ile mümkün olacak bir şey hayal ediyorum, ama bu yere nasıl yapacağımı bulamıyorum.
Python yapmak için herhangi bir yolu logging
renk modülü çıkış var mı?
(Örneğin mavi ya da sarı, kırmızı, hata ayıklama iletileri hatalar istiyorum.
Tabii ki bu muhtemelen uyumlu bir terminal (en modern terminalleri) gerektirir; ama ben orijinal geri dönüş olursa renk desteklenmiyor eğer logging
çıkış olabilir.
Günlük modülü ile renkli çıktı nasıl alabilirim herhangi bir fikir?
CEVAP
Zaten rengi kaçar, benim bash onları kullandım bir süre önce istemi biliyordu. Yine de teşekkürler.
İstediğimi sonunda çalışır ve hataları birkaç hafta sonra yaptığı günlük modülü ile entegre oldu.
Sonunda:
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)
Ve bunu yapmak için, kendi Logger oluşturun:
# 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)
Başkasının ihtiyacı olursa diye.
Eğer birden fazla logger veya işleyicisi kullanıyorsanız dikkatli olun: ColoredFormatter
Diğer işleyicileri daha geçti veya diğer kaydediciler için geliştirilen " kayıt nesnesi, değişiyor. Kaydediciler vb dosyasını yapılandırdınız. muhtemelen günlük dosyalarında renkleri var istemiyorum. Önlemek için, en iyisi sadece bir kopyasını oluşturmak record
copy.copy()
ncesinde bu levelname nitelik veya sıfırlamak levelname önceki değer, daha önce dönen biçimlendirilmiş dize (kredi için Michael yorumlar).
Nasıl Python fonksiyonu dekoratörler z...
Nasıl Python ile bir zaman gecikmesi y...
Nasıl bir Python tarih bir gün aynı iş...
Nasıl açık birden fazla dosya "Py...
Bir bash betiği nasıl eğer belli bir d...