1. 程式人生 > >python在終端輸出不同顏色的列印,自定義日誌和自定義log輸出級別

python在終端輸出不同顏色的列印,自定義日誌和自定義log輸出級別

實現過程:

      終端的字元顏色是用轉義序列控制的,是文字模式下的系統顯示功能,和具體的語言無關。

      轉義序列是以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)