端午休息

2018/06/16 休息

Posted by WangXiaoDong on June 16, 2018
    今天是端午休息的第一天,我准备来实验室读论文,最近发现了好多非常棒的论文,估计要花好多时间来阅读。

日志处理

说道日志处理,我最大的体会是我以前编程从来不用日志,每次都是coutSystem.out.println或者 print这种直接控制台输出语句调试程序,但是最近我研究的方向是日志处理,于是只能仔细看看为啥 还需要日志。

比如我上面的代码,在except后面打印的是logging.exception,这行语句在运行时没啥区别,都会在控制台中显示对应 的异常处理的那句话,但是在后期其作用就大了,因为日志除了打印功能外,有两个附加功能:

  1. 可以根据设定的等级打印对于日志输出语句
  2. 可以将日志写本地,为后期查找错误时使用

比如:

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()

根据日志等级,我们就可以控制不同的等级的日志是否显示,还能控制日志存储的位置,这样在我们不在现场 调试的时候,根据日志的显示结果就能够知道程序的异常情况,非常方便!