日誌一共分成5個等級,從低到高分別是:debug info warning error critical。debug:詳細的資訊,通常只出現在診斷問題上
info:確認一切按預期執行
warning:乙個跡象表明,一些意想不到的事情發生了,或表明一些問題在不久的將來(例如。磁碟空間低」)。這個軟體還能按預期工作。
error:更嚴重的問題,軟體沒能執行一些功能
critical:乙個嚴重的錯誤,這表明程式本身可能無法繼續執行。
這5個等級,也分別對應5種打日誌的方法: debug 、info 、warning 、error 、critical。
預設的是warning,當在warning或之上時才被跟蹤。
有兩種方式記錄跟蹤,一種輸出控制台,另一種是記錄到檔案中,如日誌檔案。
用python的logging模組記錄日誌時,遇到了重覆記錄日誌的問題,第一條記錄寫一次,第二條記錄寫兩次,第三條記錄寫三次。。。這樣記日誌可不行。建立乙個日誌模組.py的檔案原因:沒有移除handler
解決:在日誌記錄完之後removehandler
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**檔名。
日誌等級:
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')
執行:
如上述建立的兩個日誌物件
Python中logging的使用
我們先來看一下函式式簡單配置 預設情況下python的logging模組將日誌列印到了標準輸出中,且只顯示了大於等於warning級別的日誌,這說明預設的日誌級別設定為warning 日誌級別等級critical error warning info debug 預設的日誌格式為日誌級別 logge...
python中的logging模組
一 python中的logging模組提供了日誌的介面,過它儲存各種格式的日誌 日誌的等級分為以下幾種,日誌的等級按照以下順序依次提高,debug info warning error critical 但是日誌的資訊量是依次減少的,當指定乙個日誌級別之後,會記錄大於或等於這個日誌級別的日誌資訊,小...
Python中logging例項講解
logging 的基本用法網上很多,這裡就不介紹了。在引入正文之前,先來看乙個需求 假設需要將某功能封裝成類庫供他人使用,如何處理類庫中的日誌?數年前在乙個 c 開發的專案中,我用程式設計客棧了這樣的方法 定義乙個 logging 基類,所有需要用到日誌的類都繼承這個基類,這個基類中定義乙個 log...