1.關鍵字:
login 登錄
log 日志
logging python日志模塊
2.什么叫日志:
日志用來記錄用戶行為或者代碼的執行過程
3.日志使用的地方:
1.排錯的時候需要打印很多細節來幫助排錯
2.有一些用戶行為,有沒有錯都要記錄下來(后台)
3.嚴重的錯誤記錄下來
4.logging模塊的日志級別,總開關小於分開發以總開關為准,總開關大於分開關以分開關為准。
兩種書寫格式:
格式一:
格式二:
日志輸出
上面列表中的日志等級是從上到下依次升高的,即:DEBUG < INFO < WARNING < ERROR < CRITICAL,而日志的信息量是依次減少的;
問題:
問題1:為什么前面兩條日志沒有被打印出來?
這是因為logging模塊提供的日志記錄函數所使用的日志器設置的日志級別是WARNING,因此只有WARNING級別的日志記錄以及大於它的ERROR和CRITICAL級別的日志記錄被輸出了,而小於它的DEBUG和INFO級別的日志記錄被丟棄了。
問題2:默認打印出來的日志信息中各字段表示什么意思?為什么會這樣輸出?
上面輸出結果中每行日志記錄的各個字段含義分別是:日志級別:日志器名稱:日志內容
問題3:怎么修改logging這些默認設置呢?
其實很簡單,在我們調用上面這些日志記錄函數之前,手動調用一下basicConfig()方法,把我們想設置的內容以參數的形式傳遞進去就可以了。
5. logging.basicConfig()函數
該方法用於為logging日志系統做一些基本配置語法:logging.basicConfig(**kwargs)
實例2:




有了filename參數就不會直接輸出到控制台,而是寫入文件,如下圖


logging模塊講解

1 import logging 2 import time 3 import os 4
5 class LoggingMethod(): 6 # 創建方法
7 def getlogger(self): 8 logger = logging.getLogger() 9 logger.setLevel(logging.INFO)# Log等級總開關
10
11 now=time.strftime('%Y-%m-%d_%H_%M_%S') 12 filename=os.path.dirname(os.path.abspath('.')) + '\\log\\' + now + '.log'
13 # 創建一個handler,用於寫入日志文件
14 fh = logging.FileHandler(filename)#mode='a'默認以追加的形式寫入文件,如果想清空重寫用“mode='w'”
15 fh.setLevel(logging.INFO) # 輸出到file的log等級的開關
16
17 # 定義handler的輸出格式
18 formatter = logging.Formatter("%(asctime)s - %(name)s-%(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s") 19
20 fh.setFormatter(formatter) 21 # 將FileHandler對象添加到handler里面
22 logger.addHandler(fh) 23
24 return logger 25
26 if __name__=='__main__': 27 logger=LoggingMethod().getlogger() 28
29 # 日志
30 logger.debug('debug message') 31 logger.info('info message') 32 logger.warning('warning message') 33 logger.error('error message') 34 logger.critical('critical message')
設置log路徑

1 import logging 2 import time 3 import os 4
5 # 同一天的所有日志輸入到同一個log文件
6 class LoggingMethod(): 7 def getlogger(self): 8 # 設置存儲日志的文件名
9 now = time.strftime('%Y-%m-%d') 10 filename = os.path.dirname(os.path.abspath('.')) + '\\log\\' + now + '.log'
11 err_filename=os.path.dirname(os.path.abspath('.')) + '\\log\\' + now+'-error' + '-' + '.log'
12 # 第一步,創建一個logger
13 logger = logging.getLogger()#實例化logger對象
14 logger.setLevel(logging.DEBUG) # Log等級總開關
15 # 第二步,創建一個handler,用於寫入所有日志
16 fh1 = logging.FileHandler(filename,encoding='utf-8') 17 fh1.setLevel(logging.DEBUG) # 輸出到file的log等級的開關
18 # 創建一個handler,用於寫入錯誤日志
19 fh2 = logging.FileHandler(err_filename,encoding='utf-8') 20 fh2.setLevel(logging.WARNING) # 輸出到file的log等級的開關
21 # 第三步,定義handler的輸出格式
22 formatter = logging.Formatter('%(asctime)s - %(levelname)s -%(pathname)s-%(lineno)d'+'行'+'- %(message)s') 23 fh1.setFormatter(formatter) 24 fh2.setFormatter(formatter) 25 # 第四步,將handlers 添加到 logger
26 logger.addHandler(fh1) 27 logger.addHandler(fh2) 28
29 return logger 30 if __name__=='__main__': 31 logger = LoggingMethod().getlogger() 32 logger.info('測試info日志') 33 logger.error('error')