日誌一共分紅5個等級,從低到高分別是:DEBUG INFO WARNING ERROR CRITICAL。DEBUG:詳細的信息,一般只出如今診斷問題上python
INFO:確認一切按預期運行安全
WARNING:一個跡象代表,一些意想不到的事情發生了,或代表一些問題在不久的未來(例如。磁盤空間低」)。這個軟件還能按預期工做。函數
ERROR:更嚴重的問題,軟件沒能執行一些功能spa
CRITICAL:一個嚴重的錯誤,這代表程序自己可能沒法繼續運行。線程
這5個等級,也分別對應5種打日誌的方法: debug 、info 、warning 、error 、critical。
默認的是WARNING,當在WARNING或之上時才被跟蹤。debug
有兩種方式記錄跟蹤,一種輸出控制檯,另外一種是記錄到文件中,如日誌文件。
用Python的logging模塊記錄日誌時,遇到了重複記錄日誌的問題,第一條記錄寫一次,第二條記錄寫兩次,第三條記錄寫三次。。。這樣記日誌可不行。
緣由:沒有移除handler
解決:在日誌記錄完以後removeHandler
建立一個日誌模塊.py的文件日誌
import logging logging.basicConfig(filename='log.log', format='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s', datefmt='%Y-%m-%d %H:%M:%S %p', level=10) logging.debug('debug') logging.info('info') logging.warning('warning') logging.error('error') logging.critical('critical') logging.log(10,'log')
運行:
從運行結果來看,建立了一個log.log日誌文件,時間是自動生產的,module是咱們當前的python代碼文件名。code
日誌等級:orm
CRITICAL = 50
FATAL = CRITICAL
ERROR = 40
WARNING = 30
WARN = WARNING
INFO = 20
DEBUG = 10
NOTSET = 0
注:只有【當前寫等級】大於【日誌等級】時,日誌文件才被記錄。
日誌記錄格式:對象
%(name)s Logger的名字 %(levelno)s 數字形式的日誌級別 %(levelname)s 文本形式的日誌級別 %(pathname)s 調用日誌輸出函數的模塊的完整路徑名 %(filename)s 調用日誌輸出函數的模塊的文件名 %(module)s 調用日誌輸出函數的模塊名 %(funcName)s 調用日誌輸出函數的函數名 %(lineno)d 調用日誌輸出函數的語句所在的代碼行 %(created)f 當前時間,用UNIX標準的表示時間的浮 點數表示 %(relativeCreated)d 輸出日誌信息時的,自Logger建立以 來的毫秒數 %(asctime)s 字符串形式的當前時間。默認格式是 「2003-07-08 16:49:45,896」。逗號後面的是毫秒 %(thread)d 線程ID。 %(threadName)s 線程名。 %(process)d 進程ID。 %(message)s 用戶輸出的消息
對於上述記錄日誌的功能,只能將日誌記錄在單文件中,若是想要設置多個日誌文件,logging.basicConfig將沒法完成,須要自定義文件和日誌操做對象。
import logging # 定義文件 file1 = logging.FileHandler(filename='l1.log', mode='a', encoding='utf-8') fmt = logging.Formatter(fmt="%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s", datefmt='%Y-%m-%d %H:%M:%S') file1.setFormatter(fmt) file2 = logging.FileHandler(filename='l2.log', mode='a', encoding='utf-8') fmt = logging.Formatter() file2.setFormatter(fmt) # 定義日誌 logger1 = logging.Logger(name='這裏是name', level=logging.ERROR) logger1.addHandler(file1) logger1.addHandler(file2) # logger1.removeHandler(file1) # logger1.removeHandler(file2) # 寫日誌 logger1.error(msg='這裏是msg111') logger1.log(msg='這裏是msg222', level=50) # 定義文件 file3 = logging.FileHandler(filename='l3.log', mode='a', encoding='utf-8') fmt = logging.Formatter(fmt="%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s", datefmt='%Y-%m-%d %H:%M:%S') file3.setFormatter(fmt) # 定義日誌 logger2 = logging.Logger(name='這裏是name222222', level=logging.INFO) logger2.addHandler(file3) # 寫日誌 logger2.info('這裏是msg333333')
運行:
如上述建立的兩個日誌對象