logging日誌帶顏色

2021-10-04 17:43:53 字數 3424 閱讀 1311

在控制台列印時通常使用print函式,但是如果我們需要列印一些進度資訊,這些資訊通常包含統一的格式,使用print函式是不是比較繁瑣,另外,當需要將資訊寫入檔案,建立檔案和寫入資訊,檔案的管理和頻繁的開啟關閉是不是比較危險。對於python語言來說,乙個logging模組就能解決上述問題。

直接在需要print的地方使用logging來代替就可以了,logging分為debug,info,warning,error,critical五個等級(等級依次提公升),預設情況下只會列印warning以上等級即warning,error,critical的內容,如果需要列印debug以上的日誌和修改列印格式,則需要通過basicconfig函式設定logging。

logging.basicconfig(format='%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s',

level=logging.debug)

其中format來設定列印格式,具體含義可參考

level是設定列印的最小級別,由於debuglogging預設只輸出到控制台,不會保留到檔案系統中。如果需要儲存日誌,則需要通過getlogger()方法來獲取logging物件來設定。參考

import logging

from logging import handlers

class logger(object):

level_relations = #日誌級別關係對映

def __init__(self,filename,level='info',when='d',backcount=3,fmt='%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s'):

self.logger = logging.getlogger(filename)

format_str = logging.formatter(fmt)#設定日誌格式

self.logger.setlevel(self.level_relations.get(level))#設定日誌級別

sh = logging.streamhandler()#往螢幕上輸出

sh.setformatter(format_str) #設定螢幕上顯示的格式

th = handlers.timedrotatingfilehandler(filename=filename,when=when,backupcount=backcount,encoding='utf-8')#往檔案裡寫入#指定間隔時間自動生成檔案的處理器

#例項化timedrotatingfilehandler

#interval是時間間隔,backupcount是備份檔案的個數,如果超過這個個數,就會自動刪除,when是間隔的時間單位,單位有以下幾種:

# s 秒

# m 分

# h 小時、

# d 天、

# w 每星期(interval==0時代表星期一)

# midnight 每天凌晨

th.setformatter(format_str)#設定檔案裡寫入的格式

self.logger.addhandler(sh) #把物件加到logger裡

self.logger.addhandler(th)

if __name__ == '__main__':

log = logger('all.log',level='debug')

log.logger.debug('debug')

log.logger.info('info')

log.logger.warning('警告')

log.logger.error('報錯')

log.logger.critical('嚴重')

logger('error.log', level='error').logger.error('error')

正常情況下,我們希望帶有顏色的日誌,通常error和critical用紅色表示,warning用橙色表示,info用綠色表示。另外不希望用log.logger這麼長,同時也不希望每次在應用之前都重新生成乙個物件,希望使用起來和logging一樣引進來就能直接呼叫。下面是具體實現方式。

import logging

from colorma import fore,style

# 獲取物件

def get_logger():

logger = logging.getlogger()

logger.setlevel(logging.debug)

if not logger.handlers:

ch = logging.streamhandler(sys.stdout)

ch.setlevel(logging.debug)

formatter = logging.formatter(

" %(message)s")

ch.setformatter(formatter)

logger.addhandler(ch)

return logger

#通過靜態成員方法來呼叫

class log:

logger = get_logger()

@staticmethod

def debug(msg):

log.logger.debug(fore.white + "[debug]: " + str(msg) + style.reset_all)

@staticmethod

def info(msg):

log.logger.info(fore.green + "[info]: " + str(msg) + style.reset_all)

@staticmethod

def warning(msg):

log.logger.warning("\033[38;5;214m" + "[warning]: " + str(msg) + "\033[m")

@staticmethod

def error(msg):

log.logger.error(fore.red + "[error]: " + str(msg) + style.reset_all)

@staticmethod

def critical(msg):

log.logger.critical(fore.red + "[critical]: " + str(msg) + style.reset_all)

在使用時只需要import log, 在具體地方就可以想logging直接使用了(如log.info("i am green")),並且可以看到日誌顏色發生了變化。

但是當需要寫入檔案的時候,通過封裝的方式如何將filename傳遞進去呢?該內容將後續更新

logging日誌模組

日誌級別日誌輸出 將日誌輸出到控制台 log1.py 如下 import logging logging.basicconfig level logging.warning,format asctime s filename s line lineno d levelname s message s...

logging 日誌模組

什麼是日誌 無處不在的 所有的程式必須記錄日誌 給使用者看的 購物軟體 銀行卡給內部人員看的 給技術人員看的 計算器500個表示式 一些計算過程,或者是一些操作過程需要記錄下來 程式出現bug的時候,來幫助我們記錄過程 排除錯誤 給非技術人員看的 學校,公司的軟體 誰在什麼時候做了什麼事兒,刪除操作...

logging日誌模組

一 使用logging日誌 主要下面幾個步驟 1.建立乙個logger 可以理解為 記錄xx日誌的人 2.建立乙個handler 可以理解為 記錄的規則,比如啥等級的日誌會記錄下來 3.定義乙個fomatter 可以理解為 記錄的格式 比如一些需要的字段資訊 等等 4.將建立logger 跟hand...