一芒粹,前言
之前QT工程已經(jīng)學(xué)習(xí)了日志系統(tǒng)35.QT重定向日志系統(tǒng)--Apple的學(xué)習(xí)筆記蛛勉,對(duì)于一個(gè)正規(guī)的App基本上都帶有日志系統(tǒng),便于調(diào)試記錄問(wèn)題避除。我最近在開(kāi)發(fā)python小工具顷霹,之前遇到的問(wèn)題是自定義的所謂系統(tǒng)日志無(wú)法輸出到我定義的error.txt,因?yàn)槲覜](méi)想到使用python自帶的日志模塊功能来屠。
二,需求
python日志系統(tǒng)模塊使用震鹉,主要是能捕獲系統(tǒng)自帶報(bào)錯(cuò)俱笛。
三,設(shè)計(jì)
網(wǎng)上學(xué)習(xí)了下传趾,原來(lái)用法和我之前QT中用的spdlog日志庫(kù)的api功能類(lèi)似迎膜。所以很容易理解這些api。
其中最關(guān)鍵的就是exc_info=True,為T(mén)rue則可以輸出系統(tǒng)錯(cuò)誤日志墨缘。為False則不會(huì)輸出星虹,只能輸出我寫(xiě)入的內(nèi)容零抬。
import traceback,logging
import csv
import os
......
if __name__ == "__main__":
try:
readcsv()
except Exception as e:
log = logging.getLogger("log error")
fmt = logging.Formatter("%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s")
# 創(chuàng)建一個(gè)handler,用于寫(xiě)入日志文件
rq = time.strftime('%Y%m%d%H%M', time.localtime(time.time()))
log_path = os.path.dirname(os.getcwd()) + '/logs/'
log_name = log_path + 'log.txt'
logfile = log_name
file = logging.FileHandler(logfile, mode='w')
log.setLevel("DEBUG")
file.setFormatter(fmt)
log.addHandler(file)
# 將堆棧中的信息輸入到log上
#log.debug(traceback.format_exc())
log.info(u"Log start")
# exc_info設(shè)置為true宽涌,則將堆棧中的信息輸入到log上平夜,便于調(diào)試
log.error('readcsv break down', exc_info=True)
四 ,效果
2021-09-09 19:59:21,783 - ReadInputFile.py[line:92] - INFO: Log start
2021-09-09 19:59:21,783 - ReadInputFile.py[line:94] - ERROR: readcsv break down
Traceback (most recent call last):
File "D:/py/excelToDBC/CAPLgen_src/lib/ReadInputFile.py", line 62, in <module>
readcsv()
File "D:/py/excelToDBC/CAPLgen_src/lib/ReadInputFile.py", line 38, in readcsv
with open(os.path.abspath(os.path.dirname(os.getcwd())) + "\\input\\" + FileName, 'r') as fr:
FileNotFoundError: [Errno 2] No such file or directory: 'D:\\py\\excelToDBC\\CAPLgen_src\\input\\inputCANMatrix.csv'
五卸亮,小結(jié)
其實(shí)很多技術(shù)是相通的忽妒,可遷移的,我今天日志系統(tǒng)的學(xué)習(xí)就是一次驗(yàn)證兼贸。最喜歡學(xué)習(xí)的就是這些可遷移的技能和技術(shù)思想了段直,哈哈~