pytest测试使用的模块——logging
一、设置日志级别(低->高)
noset:未设置级别,继承父记录器的级别
debug:调试信息,记录详细的程序运行细节(如变量值、流程跟踪)
info:常规信息,记录程序正常运行的关键事件(如服务启动、用户登录)
warning:警告信息,记录潜在问题(如磁盘空间不足),但程序仍能运行
error:错误信息,记录严重问题导致功能失效(如数据库连接失败)
critical:致命错误,记录导致程序崩溃的极端问题(如内存耗尽、系统不可用)
二、设置日志内容的格式
| %(levelno)s | 打印日志级别的数值 |
| %(levelname)s | 打印日志级别的名称 |
| %(pathname)s | 打印当前执行程序的路径 |
| %(filename)s | 打印当前执行的程序名 |
| %(funcName)s | 打印日志的当前函数 |
| %(asctime)s | 打印日志的时间 |
| %(thread)d | 打印线程的ID |
| %(threadName)s | 打印线程名称 |
| %(process)d | 打印进程ID |
| %(processName)s | 打印进程名称 |
| %(module)s | 打印模块名称 |
| %(message)s | 打印日志信息 |
三、主要思想/步骤
1.导入logging模块
2.创建日志记录器
3.设置日志记录器级别
4.定义日志处理器
5.设置处理器格式
6.添加处理器到记录器
四、记录日志的方法
logger.info(' ')
logger.debug(' ')
logger.warning(' ')
五、代码实现
1.创建日志记录器
logger = logging.getLogger('mylogger')
2.设置日志记录器级别
logger.setLevel(logging.DEBUG)
3.定义日志处理器
StreamHandler 控制台日志输出
FileHandler 持久化日志到本地文件
RotatingFileHandler 基于文件大小轮转日志
TimedRotatingFileHandler 基于时间轮转日志
参数说明:
'logs/all.log' 日志的文件路径
when='midnight' 每天午夜轮转
interval=1 间隔1天
backupCount=7 保留最近7天的日志
atTime=datetime.time(0,0,0,0) 午夜00:00:00执行轮转
rf_handler = logging.handlers.TimedRotatingFileHandler('logs/all.log',when='midnight',interval=1,backupCount=7,atTime=datetime.time(0,0,0,0))
4.设置处理器格式
如果处理器handler不单独设置级别,那么它会继承并使用记录器logger设置的级别
format = logging.Formatter('%(asctime)s - %(levelname)s -%(message)s')
rf_handler.setFormatter(format)
5.添加处理器到记录器
logger.addHandler(rf_handler)
logger.addHandler(f_handler)
整体代码:
# 生成日志方法
def get_logger():
logger = logging.getLogger('mylogger')
logger.setLevel(logging.DEBUG)
rf_handler = logging.handlers.TimedRotatingFileHandler('logs/all.log',when='midnight',interval=1,backupCount=7,atTime=datetime.time(0,0,0,0))
format = logging.Formatter('%(asctime)s - %(levelname)s -%(message)s')
rf_handler.setFormatter(format)
f_handler = logging.FileHandler('logs/error.log')
f_handler.setLevel(logging.ERROR)
format2 = logging.Formatter('%(asctime)s - %(filename)s[:%(lineno)d] - %(message)s)')
f_handler.setFormatter(format2)
logger.addHandler(rf_handler)
logger.addHandler(f_handler)
return logger
logger = util.get_logger()
# 写入all.log
logger.debug('debug')
# 写入all.log
logger.info('info')
# 写入all.log
logger.warning('warning')
# 同时写入all.log和error.log
logger.error('error')
# 同时写入all.log和error.log
logger.critical('critical')
....敬请期待下一章的内容
更多推荐


所有评论(0)