今天是端午休息的第一天,我准备来实验室读论文,最近发现了好多非常棒的论文,估计要花好多时间来阅读。
日志处理
说道日志处理,我最大的体会是我以前编程从来不用日志,每次都是cout
、System.out.println
或者
print
这种直接控制台输出语句调试程序,但是最近我研究的方向是日志处理,于是只能仔细看看为啥
还需要日志。
比如我上面的代码,在except
后面打印的是logging.exception
,这行语句在运行时没啥区别,都会在控制台中显示对应
的异常处理的那句话,但是在后期其作用就大了,因为日志除了打印功能外,有两个附加功能:
- 可以根据设定的等级打印对于日志输出语句
- 可以将日志写本地,为后期查找错误时使用
比如:
import logging
import win32con, win32api
#配置日志输出位置信息
LOG_FORMAT = '%(asctime)s : %(levelname)s : %(message)s'
if not os.path.exists('tem'):
os.mkdir('tem')
win32api.SetFileAttributes('tem', win32con.FILE_ATTRIBUTE_HIDDEN) #将tem文件夹设置成隐藏文件
logPath = os.path.join('tem','TheLog.log') #root日志的保存位置
import logging
logging.basicConfig(format=LOG_FORMAT, level=logging.INFO, filename=logPath,filemode='a')
如果我们还需要在其他位置保存不同等级的日志输出,则可以按照下面的方式进行~
#如果另有日志需求需求,则要使用下面的方式,然后用logger来进行输出
logger = logging.getLogger("logInTem") #首先得到一个logger类
fileHandler = logging.FileHandler(logPath,encoding="gbk",mode="a") #然后得到一个日志文件句柄,同时设置:输出位置/格式/方式
fileHandler.setFormatter(logging.Formatter(LOG_FORMAT)) #给该句柄设置日志输出等级
logger.addHandler(fileHandler) #未logger类添加上面设置的句柄
#如果自定义新的日志等级最后加上下面两句话比较好
fileHandler.flush()
fileHandler.close()
根据日志等级,我们就可以控制不同的等级的日志是否显示,还能控制日志存储的位置,这样在我们不在现场 调试的时候,根据日志的显示结果就能够知道程序的异常情况,非常方便!