上篇文章對(duì)logging做了基本介紹,我們可以使用logging來(lái)做日志的簡(jiǎn)單記錄。但實(shí)際項(xiàng)目應(yīng)用時(shí),我們一般會(huì)根據(jù)自身需要對(duì)其做二次封裝(loggingV2)墙牌,然后在其他python文件中, 先import申明后直接調(diào)用柑晒。
廢話不多說(shuō),下面給幾個(gè)二次封裝的簡(jiǎn)單示例:
示例一:
loggingV2.py - 封裝
logMain.py - 應(yīng)用
示例二:
? ? 對(duì)上述示例進(jìn)行模塊化封裝葬毫,如下log.py
則任何聲明了log模塊的python文件都可以調(diào)用logging日志系統(tǒng)镇辉,如下logMain.py
示例三:
? ??對(duì)上述示例進(jìn)行定制化封裝,如下myLog.py
????需求:
????1)同時(shí)實(shí)現(xiàn)終端顯示與日志文件保存
????2)日志文件名除日期外贴捡,增加顯示時(shí)間忽肛,精確到秒
????3)日志輸出級(jí)別可配置
? ? 4)日志保存路徑與文件名可配置
????5)日志跨天(或者小時(shí)/分鐘),另生成新文件保存
改寫(xiě)logMain.py烂斋,如下:
示例四:
????對(duì)上述示例進(jìn)行異步線程封裝屹逛,如下myThreadLog.py
????需求:
????????1)獨(dú)立線程處理日志,不影響主程序性能
????????2)使用隊(duì)列異步處理日志記錄
?繼續(xù)改寫(xiě)logMain.py汛骂,如下:
? ? 注意 - 線程相關(guān)操作函數(shù)(如下):
????????1.threading.Thread() — 創(chuàng)建線程并初始化線程罕模,可以為線程傳遞參數(shù)
????????2.threading.enumerate() — 返回一個(gè)包含正在運(yùn)行的線程的list
????????3.threading.activeCount(): 返回正在運(yùn)行的線程數(shù)量,與len(threading.enumerate())有相同的結(jié)果
????????4.Thread.start() — 啟動(dòng)線程
????????5.Thread.join() — 阻塞函數(shù)帘瞭,一直等到線程結(jié)束
????????6.Thread.isAlive() — 返回線程活動(dòng)狀態(tài)
????????7.Thread.setName() — 設(shè)置線程名
????????8.Thread.getName() — 獲取線程名
????????9.Thread.setDaemon() —?設(shè)置為后臺(tái)線程手销,這里默認(rèn)是False,設(shè)置為T(mén)rue之后則主線程不會(huì)再等待子線程結(jié)束才結(jié)束图张,而是主線程結(jié)束意味程序退出锋拖,子線程也立即結(jié)束,注意調(diào)用時(shí)必須設(shè)置在start()之前祸轮;
????????10.除了以上常用函數(shù)兽埃,線程還經(jīng)常與互斥鎖Lock/事件Event/信號(hào)量Condition/隊(duì)列Queue等函數(shù)配合使用