python模塊—日誌
日誌是我們排查問題的關鍵利器,寫好日誌記錄,當我們發生問題時,可以快速定位代碼範圍進行修改。Python有給我們開發者們提供好的日誌模塊
1.日誌模塊:logging
例子:
import logging
logging.debug("This is debug message")
logging.info("This is info message")
logging.warning("This is warning message")
logging.error("This is error message")
logging.critical("This is critical message")
結果:
WARNING:root:This is warning message
ERROR:root:This is error message
CRITICAL:root:This is critical message
說明:級別由上往下,依次升高,默認為info,所以只打印級別更高的日誌信息
2.通過logging.basicConfig函數,提升日誌級別至debug
函數說明:
level: 設置日誌級別,默認為logging.WARNING
filename: 指定日誌文件名。
filemode: 和file函數意義相同,指定日誌文件的打開模式,‘w‘或‘a‘
format:
%(levelname)s: 打印日誌級別名稱
%(filename)s: 打印當前執行程序名
%(funcName)s: 打印日誌的當前函數
%(lineno)d: 打印日誌的當前行號
%(asctime)s: 打印日誌的時間
%(thread)d: 打印線程ID
%(process)d: 打印進程ID
%(message)s: 打印日誌信息
datefmt: 指定時間格式,同time.strftime()
stream: 指定將日誌的輸出流,可以指定輸出到sys.stderr,sys.stdout或者文件,默認輸出到sys.stderr,當stream和filename同時指定時,stream被忽略
logging.getLogger([name]): 創建一個日誌對象
例子:
import logging
logging.basicConfig(level=logging.DEBUG, format=‘%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s‘,datefmt=‘ %Y/%m/%d %H:%M:%S‘, filename=‘mytest.log‘, filemode=‘w‘)
logger = logging.getLogger(__name__)
logging.debug("This is debug message")
logging.info("This is info message")
logging.warning("This is warning message")
logging.error("This is error message")
logging.critical("This is critical message")
結果:
目錄下產生一個名為mytest.log文件,內容為:
2017/10/24 16:30:23 a1.python.py[line:436] DEBUG This is debug message
2017/10/24 16:30:23 a1.python.py[line:437] INFO This is info message
2017/10/24 16:30:23 a1.python.py[line:438] WARNING This is warning message
2017/10/24 16:30:23 a1.python.py[line:439] ERROR This is error message
2017/10/24 16:30:23 a1.python.py[line:440] CRITICAL This is critical message
說明:返回一個logger實例,如果沒有指定name,返回root logger;只要name相同,返回的logger實例都是同一個而且只有一個,即name和logger實例是一一對應的。這意味著,無需把logger實例在各個模塊中傳遞。只要知道name,就能得到同一個logger實例。
logging.getLogger(__name__) 在上述實例中__name__就指的是__main__
python模塊—日誌