記錄器是程序不可或缺的部分,沒有了記錄器是很難在程序中發(fā)現(xiàn)問題所在的,只能一個模塊一個模塊的去排查
有了記錄器就會很快定位到位置所在,這樣就可以方便的找到錯誤,為排查問題降低成本
一個記錄器標準模塊,根據(jù)級別返回有效信息
Level等級 數(shù)值
CRITICAL 50
ERROR 40
WARNING 30
INFO 20
DEBUG 10
NOTSET 0
NOTSET<DEBUG<INFO<WARNING<ERROR<CRITICAL 可以這么理解,包含的關系,一層一層的概括進去
log的配置可以分開來配置
import logging
logger = logging.getLogger()
logger.setLevel(logging.INFO) #設置輸出等級
ph = logging.StreamHandler() #創(chuàng)建輸出控制臺的容器
formatter = logging.Formatter("%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s") #配置輸出的內(nèi)容
ph.setFormatter(formatter) #將配置內(nèi)容添加到創(chuàng)建的容器里
logger.addHandler(ph) #將我們的容器添加到handler
logger.info("控制臺輸出內(nèi)容")

image.png
Formatter是設置輸出的展示內(nèi)容,可以傳多參數(shù)

image.png
既然在控制臺輸出了,還要輸出到文件中,保存起來
在創(chuàng)建個FileHandler,添加到Handler容器中就可以實現(xiàn)了
logger = logging.getLogger() # 初始化logger
logger.setLevel(logging.INFO) #設置log級別
fileTimeName = time.strftime("%Y-%m-%d",time.localtime()) # 輸出日期,設置log文件名字
genpath = os.path.abspath("..") #獲取到根目錄
logpath = os.path.join(genpath,"log") #拼接log文件路徑
logFileName = logpath+"/"+fileTimeName+".log"
fh = logging.FileHandler(logFileName,mode="w",encoding="utf-8") #既然是寫入文件,就需要傳個文件路徑和名字,mode是寫入方式,encoding編碼格式
if os.path.exists(logpath): #判斷路徑是否存在,不存在則創(chuàng)建
pass
else:
os.makedirs(logpath)
formatter = logging.Formatter("%(asctime)s - %(filename)s[line:%(lineno)d] %(name)s - %(levelname)s: %(message)s")
fh.setFormatter(formatter)
logger.addHandler(fh)
總結
1、log常用兩種方式
???? 控制臺輸出
???? 寫入本地文件中
2、控制臺輸出,使用StreamHandler()
???? 寫入文件,使用FileHandler(path,mode="w",encoding="utf-8")
???? 其他部分都是通用的,初始化,設置輸出等級,設置輸出樣式,添加到handler里