在控制台列印時通常使用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...