一,前言
之前QT工程已经学习了日志系统35.QT重定向日志系统--Apple的学习笔记,对于一个正规的App基本上都带有日志系统,便于调试记录问题。我最近在开发python小工具,之前遇到的问题是自定义的所谓系统日志无法输出到我定义的error.txt,因为我没想到使用python自带的日志模块功能。
二,需求
python日志系统模块使用,主要是能捕获系统自带报错。
三,设计
网上学习了下,原来用法和我之前QT中用的spdlog日志库的api功能类似。所以很容易理解这些api。
其中最关键的就是exc_info=True,为True则可以输出系统错误日志。为False则不会输出,只能输出我写入的内容。
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")
# 创建一个handler,用于写入日志文件
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设置为true,则将堆栈中的信息输入到log上,便于调试
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'
五,小结
其实很多技术是相通的,可迁移的,我今天日志系统的学习就是一次验证。最喜欢学习的就是这些可迁移的技能和技术思想了,哈哈~
网友评论