python在終端輸出不同顏色的列印,自定義日誌和自定義log輸出級別
阿新 • • 發佈:2018-12-29
實現過程:
終端的字元顏色是用轉義序列控制的,是文字模式下的系統顯示功能,和具體的語言無關。
轉義序列是以ESC開頭,即用\033來完成(ESC的ASCII碼用十進位制表示是27,用八進位制表示就是033)。
書寫格式:
開頭部分:\033[顯示方式;前景色;背景色m + 結尾部分:\033[0m
注意:開頭部分的三個引數:顯示方式,前景色,背景色是可選引數,可以只寫其中的某一個;另外由於表示三個引數不同含義的數值都是唯一的沒有重複的,所以三個引數的書寫先後順序沒有固定要求,系統都能識別;但是,建議按照預設的格式規範書寫。
對於結尾部分,其實也可以省略,但是為了書寫規範,建議\033[***開頭,\033[0m結尾。
數值表示的引數含義:
常見開頭格式:
\033[0m 預設字型正常顯示,不高亮
\033[32;0m 紅色字型正常顯示
\033[1;32;40m 顯示方式: 高亮 字型前景色:綠色 背景色:黑色
\033[0;31;46m 顯示方式: 正常 字型前景色:紅色 背景色:青色
例項:
(1)print("\033[1;31;40m您輸入的帳號或密碼錯誤!\033[0m")
上方程式碼的輸出格式為:字型高亮,紅色前景,黃色背景 PS:前景色也就是字型的顏色
(2)print("\033[0;31m%s\033[0m" % "輸出紅色字元")
#上方程式碼的輸出格式為:字型預設,紅色前景
LOG_INFO='INFO' LOG_ERROR='ERROR' LOG_WARNING='WARNING' LOG_NOTIFY='NOTIFY' LOG_DEBUG='DEBUG' LOG_USER='USER' import time #日誌水平,0不輸出,1輸出ERROR,2輸出WARNING、ERROR,3輸出NOTIFY、WARNING、ERROR #4輸出INFO、NOTIFY、WARNING、ERROR,5輸出除DEBUG外的其他,6輸出所有包括DEBUG log_level=5 def get_time_stamp(): ct = time.time() local_time = time.localtime(ct) data_head = time.strftime("%Y-%m-%d %H:%M:%S", local_time) data_secs = (ct - long(ct)) * 1000 time_stamp = "%s.%03d" % (data_head, data_secs) return time_stamp def info_log(value): if log_level > 3: print("\033[37m[%s][info]%s\033[0m"%(get_time_stamp(),value)) def error_log(value): if log_level != 0: print("\033[31m[%s][error]%s\033[0m"%(get_time_stamp(),value)) def warning_log(value): if log_level > 1: print("\033[33m[%s][warning]%s\033[0m"%(get_time_stamp(),value)) def debug_log(value): if log_level > 5: print("\033[34m[%s][debug]%s\033[0m"%(get_time_stamp(),value)) def notify_log(value): if log_level > 2: print("\033[36m[%s][notify]%s\033[0m"%(get_time_stamp(),value)) def user_log(value): if log_level > 4: print("\033[32m[%s][user]%s\033[0m"%(get_time_stamp(),value)) def ZLOG(log_type,value): switcher={ 'INFO':info_log, 'ERROR':error_log, 'WARNING':warning_log, 'DEBUG':debug_log, 'NOTIFY':notify_log, 'USER':user_log } return switcher[log_type](value) test = "logtest" ZLOG(LOG_INFO,"hello" + test) ZLOG(LOG_ERROR,"hello %s"%test)