日志
日志是跟蹤軟件運(yùn)行時(shí)所發(fā)生的事件的一種方法。軟件開(kāi)發(fā)者在代碼中調(diào)用日志函數(shù),表明發(fā)生了特定的事件。事件由描述性消息描述,該描述性消息可以可選地包含可變數(shù)據(jù)(即,對(duì)于事件的每次出現(xiàn)都潛在地不同的數(shù)據(jù))。事件還具有開(kāi)發(fā)者歸因于事件的重要性;重要性也可以稱為級(jí)別或嚴(yán)重性。
logging日志等級(jí)
logging模塊默認(rèn)定義了以下五種日志等級(jí):
- DEBUG
? 最詳細(xì)日志信息, 多用于問(wèn)題診斷 - INFO
? 僅次于DEBUG, 多用于記錄關(guān)鍵點(diǎn)信息, 確保程序按預(yù)期執(zhí)行 - WARNING
? 低等級(jí)故障, 但程序仍能運(yùn)行, 如磁盤空間不足警告 - ERROR
? 由于比WARNING嚴(yán)重的問(wèn)題, 導(dǎo)致某些功能不能正常運(yùn)行 - CRITICAL
? 嚴(yán)重錯(cuò)誤, 導(dǎo)致應(yīng)用程序不能繼續(xù)運(yùn)行
默認(rèn)等級(jí)是WARNING,即僅僅這個(gè)等級(jí)及以上的才會(huì)反饋信息,DEBUG和INFO均不會(huì)被反饋。
常用函數(shù)
- logging.debug(msg)
logging.info(msg)
logging.warning(msg)
logging.error(msg)
logging.critical(msg)
上述五個(gè)函數(shù)可分別設(shè)置其對(duì)應(yīng)級(jí)別的日志信息內(nèi)容
msg--字符串格式,內(nèi)容即輸出日志信息 - logging.basicConfig(**kwargs)
為日志模塊配置基本信息。設(shè)置后可以直接使用logging來(lái)打印日志,其常用關(guān)鍵字參數(shù)如下:- filename: 日志文件的保存路徑。如果配置了該參數(shù),將自動(dòng)創(chuàng)建一個(gè)FileHandler作為Handler;
- filemode: 日志文件的打開(kāi)模式。 默認(rèn)值為’a’,表示日志消息以追加的形式添加到日志文件中。如果設(shè)為’w’, 那么每次程序啟動(dòng)的時(shí)候都會(huì)創(chuàng)建一個(gè)新的日志文件;
- datefmt: 指定時(shí)間格式,同time.strftime()
- level: 設(shè)置日志級(jí)別,默認(rèn)為logging.WARNING
- stream: 設(shè)置特定的流用于初始化StreamHandler;指定日志的輸出流,可以指定輸出到sys.stderr,sys.stdout或者文件,默認(rèn)輸出到sys.stderr,當(dāng)stream和filename同時(shí)指定時(shí),stream被忽略
- format: 指定輸出的格式和內(nèi)容
format參數(shù)中可能用到的格式化串如下:
%(name)s Logger的名字
%(levelno)s 數(shù)字形式的日志級(jí)別
%(levelname)s 文本形式的日志級(jí)別
%(pathname)s 調(diào)用日志輸出函數(shù)的模塊的完整路徑名,可能沒(méi)有
%(filename)s 調(diào)用日志輸出函數(shù)的模塊的文件名
%(module)s 調(diào)用日志輸出函數(shù)的模塊名
%(funcName)s 調(diào)用日志輸出函數(shù)的函數(shù)名
%(lineno)d 調(diào)用日志輸出函數(shù)的語(yǔ)句所在的代碼行
%(created)f 當(dāng)前時(shí)間,用UNIX標(biāo)準(zhǔn)的表示時(shí)間的浮 點(diǎn)數(shù)表示
%(relativeCreated)d 輸出日志信息時(shí)的,自Logger創(chuàng)建以 來(lái)的毫秒數(shù)
%(asctime)s 字符串形式的當(dāng)前時(shí)間。默認(rèn)格式是 “2003-07-08 16:49:45,896”。逗號(hào)后面的是毫秒
%(thread)d 線程ID??赡軟](méi)有
%(threadName)s 線程名??赡軟](méi)有
%(process)d 進(jìn)程ID??赡軟](méi)有
%(message)s 用戶輸出的消息
- logging.getLogger([name])
創(chuàng)建Logger對(duì)象。日志記錄的工作主要由Logger對(duì)象來(lái)完成。在調(diào)用getLogger時(shí)要提供Logger的名稱(使用相同名稱來(lái)調(diào)用getLogger,返回的是同一個(gè)對(duì)象的引用。),Logger實(shí)例之間有層次關(guān)系,這些關(guān)系通過(guò)Logger名稱來(lái)體現(xiàn),如:
p = logging.getLogger(“root”)
c1 = logging.getLogger(“root.c1”)
c2 = logging.getLogger(“root.c2”)
例子中,p是父logger, c1,c2分別是p的子logger。c1, c2將繼承p的設(shè)置。如果省略了name參數(shù), getLogger將返回日志對(duì)象層次關(guān)系中的根Logger。 - logging.StreamHandler
- logging.FileHandler
- logging.Formatter