2021-03-04 10:30:12
浏览数 (1)
- 一些需要反复使用的调试语句,可以使用logger输出
给logger设置是告诉它要记录哪些级别的日志,给handler设是告诉它要输出哪些级别的日志,相当于进行了两次过滤。这样的好处在于,当我们有多个日志去向时,比如既保存到文件,又输出到控制台,就可以分别给他们设置不同的级别;logger 的级别是先过滤的,所以被 logger 过滤的日志 handler 也是无法记录的,这样就可以只改 logger 的级别而影响所有输出。两者结合可以更方便地管理日志记录的级别。
logging.FileHandler -> 文件输出
logging.StreamHandler() # 控制台输出
logging.handlers.RotatingFileHandler -> 按照大小自动分割日志文件,一旦达到指定的大小重新生成文件
logging.handlers.TimedRotatingFileHandler -> 按照时间自动分割日志文件
logger.debug(‘debug级别,一般用来打印一些调试信息,级别最低’)
logger.info(‘info级别,一般用来打印一些正常的操作信息’)
logger.warning(‘waring级别,一般用来打印警告信息’)
logger.error(‘error级别,一般用来打印一些错误信息’)
logger.critical(‘critical级别,一般用来打印一些致命的错误信息,等级最高’)
代码语言:javascript
复制import logging
from logging import handlers
logger = logging.getLogger('train')
logger.setLevel(level=logging.DEBUG) # 设置打印级别
formatter = logging.Formatter('%(asctime)s: %(message)s') # 设置打印格式
stream_handler = logging.StreamHandler() # 控制台输出
stream_handler.setLevel(logging.DEBUG)
stream_handler.setFormatter(formatter)
file_handler = logging.FileHandler('train1.log', encoding='utf-8')
file_handler.setLevel(level=logging.INFO)
file_handler.setFormatter(formatter)
logger.addHandler(stream_handler)
logger.addHandler(file_handler)
logger.info('info级别,一般用来打印一些正常的操作信息')
time_rotating_file_handler = handlers.TimedRotatingFileHandler(filename='rotating_test.log', when='D',encoding='utf-8')
time_rotating_file_handler.setLevel(logging.INFO)
time_rotating_file_handler.setFormatter(formatter)
logger.addHandler(time_rotating_file_handler)
- 代码需要注意包含:断点续训、保存模型、加载模型进行测试这几部分。最好还能画出loss和精度在训练集和验证集的变化曲线。