2017-08-28 142 views
-2

我試圖創建將無需外部包着色基本記錄器,如何獲取當前日誌級別的Python記錄模塊

# these have to be the first functions so I can use it in the logger settings 
def create_log_name(log_path="{}/log", filename="zeus-log-{}.log"): 
    if not os.path.exists(log_path.format(os.getcwd())): 
     os.mkdir(log_path.format(os.getcwd())) 
    find_file_amount = len(os.listdir(log_path.format(os.getcwd()))) 
    full_log_path = "{}/{}".format(log_path.format(os.getcwd()), filename.format(find_file_amount + 1)) 
    return full_log_path 


def set_color_value(levelname): 
    log_set = { 
     "INFO": "\033[92m{}\033[0m", 
     "WARNING": "\033[93m{}\033[0m", 
     "DEBUG": "\033[94m{}\033[0m", 
     "ERROR": "\033[91m{}\033[0m", 
     "CRITICAL": "\033[91m{}\033[0m" 
    } 
    return log_set[levelname].format(levelname) 

logger = logging.getLogger("zeus-log") 
logger.setLevel(logging.DEBUG) 
file_handler = logging.FileHandler(
    filename=create_log_name(), mode="a+" 
) 
file_handler.setLevel(logging.DEBUG) 
console_handler = logging.StreamHandler() 
console_handler.setLevel(logging.DEBUG) 
file_format = logging.Formatter(
    '%(asctime)s;%(name)s;%(levelname)s;%(message)s' 
) 
console_format = logging.Formatter(
    "[%(asctime)s {}] %(message)s".format(set_color_value()), "%H:%M:%S" 
) 
file_handler.setFormatter(file_format) 
console_handler.setFormatter(console_format) 
logger.addHandler(console_handler) 
logger.addHandler(file_handler) 

所以截至目前,所有我需要做的是獲得將在logging.Formatter設置當前日誌級別,並將其發送給我的小功能:

console_format = logging.Formatter(
    "[%(asctime)s {}] %(message)s".format(set_color_value()), "%H:%M:%S" 
) 

是否有可能得到logging包當前日誌級別?


例如,可以說我通過logger.INFO("test")我需要一種方法來獲取INFO部分作爲一個字符串,從那裏,set_color_value("INFO")應該返回:

enter image description here

回答

2

我決定做這個不同的方式,並通過添加顏色的條紋摹本身帶數字:

def set_color(org_string, level=None): 
    color_levels = { 
     10: "\033[36m{}\033[0m",  # DEBUG 
     20: "\033[32m{}\033[0m",  # INFO 
     30: "\033[33m{}\033[0m",  # WARNING 
     40: "\033[31m{}\033[0m",  # ERROR 
     50: "\033[7;31;31m{}\033[0m" # FATAL/CRITICAL/EXCEPTION 
    } 
    if level is None: 
     return color_levels[20].format(org_string) 
    else: 
     return color_levels[int(level)].format(org_string) 

因此,例如:

logger.info(set_color("test")) 
logger.debug(set_color("test", level=10)) 
logger.warning(set_color("test", level=30)) 
logger.error(set_color("test", level=40)) 
logger.fatal(set_color("test", level=50)) 

將輸出:

enter image description here

2

是的,你可以檢查記錄器水平由

level = logger.level 
+0

不這只是表明當前記錄器設置的級別至?我需要一種方法來獲取從記錄器傳遞的每個字符串的日誌記錄信息,例如,可以說我通過'logger.FATAL(「test」)'我需要那個'FATAL'部分作爲字符串傳遞 – wahwahwah

+1

此答案回答這個問題問了什麼。自從我到達這裏尋找答案以來,您的問題需要改進。 –

+0

**同意**您的問題的內容與您的問題的標題@wahwahwah不一致。後者可能對StackOverflowers(包括我自己)更感興趣。它*非常不正交,因爲'logging' API定義了'setLevel()'和'getEffectiveLevel()'方法,但是沒有*'getLevel()'方法,當它們可以簡單地定義一個簡單的'getLevel ):返回self.level'方法。 '' –