当前位置: 首页 > news >正文

[日志收集]

日志简介

  • 用于记录系统运行时的信息,对一个事情的记录(脚本运行中某个重要变量的值,方法输入参数和返回结果,参数,错误,异常信息),也称为log.

搜集日志的作用

  • 分析代码,定位bug
  • 调试代码
  • 了解项目系统运行的状况
  • 分析用户的行为,做数据统计

日志的级别(记高中低级别次序)

  • logging.DEBUG:调试级别[高]
  • logging.INFO:信息级别[较高]
  • logging.WARNING:警告级别[中]
  • logging.ERROR:错误级别[低]
  • logging.CRITICAL:严重错误级别[极低]

特性

  • 日志级别设定后,比自己设定级别低的日志才会打印
    • 设定日志级别为info,debug级别的日志信息不会打印,warning,error,critial会打印

日志代码实现分析
在这里插入图片描述

  • 控制台 : 打印在屏幕上看
  • 日志文件对象 : 写在日志文件里

在这里插入图片描述

  • 参数含义
    • filename:日志文件名
    • when:产生日志文件的时间单位(几点产生)
    • interval:单位的个数(几次)
    • backupCount : 系统中保留日志文件的个数(比如说backupCount数值为3,那只保留3天的日志,第四天的日志加入时会删除第一天的)
使用步骤 :
  1. 将loggin_user.py文件部署到项目中
  2. 在项目下创建一个log的目录,用于存放log日志文件
  3. 在项目中使用日志之前,初始化日志信息,指定日志文件名,单位,单位间隔和保留的文件个数
  4. 在需要打印输出的位置使用logging级别(“想要输出的信息”)

[全量字段校验]

  • 本质:更进⼀步的断⾔(校验接口实际与预期是否一致,校验全部字段)
  • 与传统断⾔的区别:
    • 传统断⾔:只能校验特定字段的值(如状态码是否为200,success是否为true等)
    • 全量字段校验:可校验字段值、字段名、字段类型(如校验data字段是否存在且
      为字符串类型)
  • 校验流程:
    • 定义校验规则
      • 必填字段是否存在(如success/code/message)
      • 字段数据类型是否正确(如code是否为整数,code是否为整数)
      • 字段值是否符合预期(如message是否为"操作成功")
    • 对比响应数据是否符合校验规则

  • json数据
{"success":true,"code":10000,"massage":"操作成功"}
  • 对应校验规则
{"type":"object","properties":{"success":{"type":"boolean"},"code":{"type":"integer"},"message":{"type":"string"}
},"required":["success","code","message"]
}
  • 规则结构:包含type、properties和required三个关键部分

    • 字段类型校验:
      • “type”:"object"表示整个JSON是对象类型
      • "properties"中定义各字段类型要求,如布尔型、整型、字符串型
      • "required"列出必须存在的字段名
  • 校验:
    在这里插入图片描述

python代码校验
  • 实现步骤:
  1. 导包:import jsonschema
  2. 创建校验规则:定义schema格式的数据校验规则
  3. 调⽤⽅法:jsonschema.validate(instance=“json数据”,schema=“jsonschema规则”)
  • 校验结果:
    • 校验通过:返回None
    • 校验失败:返回错误信息
      • schema规则错误:返回SchemaError
      • json数据错误:返回ValidationError
案例
# 入门案例:
# 1.导包
import jsonschema
# 2.创建 校验规则
schema={"type":"object","properties":{"success":{"type":"boolean"},"code":{"type":"integer"},"message":{"type":"string"}},"required":["success","code","massage"]
}
# 3.调用方法,进行校验(用python语言表示json数据)
json_data={"success":True,"code":10000,"massage":"操作成功"
}
# 4.调用方法进行校验
res=jsonschema.validate(instance=json_data,schema=schema)
# 5.查看校验结果
print("校验结果:",res)
知识点核心内容补充
JSON Schema校验流程三步流程:1.导包 2.准备校验规则 3.调⽤validate⽅法校验规则语法转换JSON语法需适配编程语⾔规范
validate⽅法参数结构:validate(instance=实际数据,schema=校验规则)参数对应关系:instance对应实际JSON数据,schema对应校验规则
校验结果处理成功:返回None;失败:返回错误对象两种错误类型区分:SchemaError(规则错误) ValidationError(数据错误)
[关键字]
  • JSON Schema语法
    在这里插入图片描述
    • 基本语法:“type”:“数据类型”,必须⽤双引号包裹类型名称
    • 校验流程:通过jsonschema.validate(instance=json_data,schema=schema)⽅法执⾏校验
integer -- 整数
string	-- 字符串
object	-- 对象
array	-- 数组,对应python列表
number	-- 整数/小数
null	-- 空值,对应python中的None
boolean	-- 布尔值,对应truefalse
语法:
{"type":"数据类型"
}
# 实现步骤
1> 导包:import jsonschema
2> 定义校验规则schema
3> 准备待校验数据json_data
4> 调⽤validate⽅法
5> 打印校验结果
import jsonschema
# 2.定义规则
schema={"type":"number"
}
schema1={"type":"object"
}
# 3.定义数据
json_data=100
json_data2=100.2
json_data3={"a":1,"b":2}
# 4.调用规则进行验证
res=jsonschema.validate(instance=json_data,schema=schema)
res2=jsonschema.validate(instance=json_data2,schema=schema)
res3=jsonschema.validate(instance=json_data3,schema=schema1)# 5.查看结果
print("校验结果res:",res)
print("校验结果res2:",res2)
print("校验结果res3:",res3)
  • 总结
知识点核心内容补充
JSONSchema校验规则通过type关键字约束数据类型(integer/string/object/array/number/null/boolean)integer与number的区别(整数vs⼩数)
properties关键字当type为object时,⽤properties定义对象内键值对的数据类型限制嵌套对象校验的语法结构
const关键字直接断⾔字段值必须等于指定值(如code:100.3)与普通断⾔的区别(静态校验vs动态测试)
pattern关键字通过正则表达式实现模糊匹配(如姓名模糊查询)正则语法与数据库LIKE的对⽐
数据类型语法细节所有关键字和类型值需⽤双引号包裹(如"type":“string”)null的JSON语法(⾮Python的
None)
[properties关键字]
  • 说明 : 是type关键字的辅助,当type的值为object时使用,
  • 作用 : 指定对象中每个字段的校验规则
  • 语法:
    • “type”: “object”: ⾸先声明类型为对象。
    • “properties”: { “字段1”:{规则} }: 在properties下,使⽤键值对的⽅式描述每个字段及其校验规则。
# 导包
import jsonschema
# 创建校验规则定义⼀个schema变量,包含type和properties,其中properties下详细描述每个字段的类型规则。
schema={"type":"object","properties":{"success":{"type":"boolean"},"code":{"type":"integer"},"message":{"type":"string"},"money":{"type":"number"},"address":{"type":"null"},"data":{"type":"object"},"luckyNumber":{"type":"array"}}
}
# 测试数据
json_data={"success":True,"code":10000,"message":"操作成功","money":6.66,"address":None,"data":{"name":"tom"},"luckNumber":[6,8,9]
}# 调用方法校验
res1=jsonschema.validate(instance=json_data,schema=schema)
# 查看校验结果
print("校验结果:",res1)

嵌套

"data":{"type":"object","properties":{	# data类型为object,所以可加内层properties实现嵌套"name":{"type":"string"},"age":{"type":"integer"},"height":{"type":"number"}}},      
------------------------------------------"data":{"name":"tom","age":18,"height":1.81},
[required关键字]
  • 作⽤:校验对象中必须存在的字段。字段名必须是字符串,且唯⼀。
  • 语法:{“required”:[“字段名1”,“字段名2”,…]}
  • 注意事项:
    • 字段名必须⽤双引号包裹形成字符串形式
    • JSON数据中的键必须是字符串类型,⽽python字典中的键可以是任意不可变类型
    • 字段名必须唯⼀,不能重复
    • required关键字必须与type、properties在同⼀级别,不能写在properties内部
    • 字段名可以少,但不能多
# 导包
import jsonschema
# 测试数据
json_data={"success":True,"code":10000,"message":"操作成功","money":6.66,"address":None,"data":{"name":"tom"},"luckyNumber":[6,8,9]
}
# 创建校验规则
schema={"type":"object",#这里!!注意级别与type和properties同级别"required":["success","code","message","money","address","data","luckyNumber"],"properties":{"success":{"type":"boolean"},"code":{"type":"integer"},"message":{"type":"string"},"money":{"type":"number"},"address":{"type":"null"},"data":{"type":"object"},"luckyNumber":{"type":"array"}}
}# 调用方法校验
res1=jsonschema.validate(instance=json_data,schema=schema)
# 查看校验结果
print("校验结果:",res1)
  • 嵌套对象校验:
    • 对于嵌套的object类型字段,可以在其properties内部再使⽤required
    • 示例中data字段是object,要求必须包含name、age和height字段
    • required的位置必须在对应object的properties内部
"data":{"type":"object","required":["name","age","height"]},
----------------properties写不写都行----------------
"data":{"name":"tom","age":18,"height":1.81
},
知识点内容补充注意
JSON Schema校验全量字段校验可验证数据字段类型和字段名注意字段类型校验与字段名校验的区别
type关键字⽤于校验数据值的类型(如boolean/string/number等)校验的是数据值类型
properties关键字描述对象中每个字段的数据类型要求与type关键字需配合使⽤
required关键字校验对象中必须存在的字段书写位置(与properties同级而非嵌套)
JSON键名规则键名必须为字符串且唯⼀Python字典与JSON键名规则差异(Python允许⾮字符串键)
嵌套校验对嵌套对象内的字段进⾏required校验嵌套required的书写层级需与对应properties同级
语法格式required字段需⽤数组形式列出必须字段字段名必须⽤双引号包裹
[const关键字]
  • 等价断⾔:const关键字的作⽤等价于断⾔中的等于判断,⽤于校验字段值是否为固定值
  • 全量校验:在全量字段校验中,const可以实现类似断⾔中等值判断的功能
  • 语法 : {“字段名”:{“const”:具体值}}
import jsonschema# 待测数据
data = {"success": True,"name": "李四","height": 1.92,"addr":None
}
# 校验规则
schema={"type":"object",		# 可以省略"properties":{"success":{"const":True},"name":{"const":"李四"},"height":{"const":1.92},"addr":{"const":None}}
}
[pattern关键字]---------用到正则表达式
  • 定义与作⽤:使⽤不常⽤符号(如$、^、[]、{}等)组合成特定语法,从⼤量字符串数据中按条件筛选数据
  • 应⽤场景:企业项⽬中75%以上数据为字符串,常⽤于字符串模糊匹配(如筛选姓名含特定字的学⽣)
# 举例:
基本规则:
o 包含匹配:直接写⽬标字符串(如"hello"),等效于断⾔中的in
o 开头匹配:⽤^符号(如^hello匹配"hello,world")
o 结尾匹配:⽤$符号(如hello$匹配"中国,hello")
o 单字符匹配:⽤[]包含可选字符(如[0-9]匹配任意数字,[a-z]匹配任意一个⼩写字⺟)
o 次数匹配:⽤{}指定次数(如[0-9]{11}匹配11位数字,就是长度为11,内容为0-9,12345678901
# 语法
{"字段名":{"pattern":"正则表达式"}
}
# 导包
import jsonschema
# 测试数据
data={"message":"操作成功!","mobile":"13800000002"
}
# 校验规则
schema={"type":"object","properties":{"message":{"pattern":"^操作成功"},"mobile":{"pattern":"^[0-9]{11}$"}}
}
res=jsonschema.validate(instance=data,schema=schema)
# 5.查看结果
print("校验结果res:",res)
[综合案例]
# 需求
校验需求:
o 整个JSON数据是⼀个对象
o 必须包含success、code、message、data字段,且字段必须存在
o success字段为布尔类型
o code为整数类型
o message为以"登录成功"结尾的字符串
o data为对象,必须包含name、age字段
o data中的name字段必须等于"lily"
o data中的age必须是20
data = {"success": false,"code": 10000,"message": "xxx登录成功","data": {"age": 20,"name": "lily"}}
# 示例
# 导包
import jsonschema# 测试数据
data = {"success": False,"code": 10000,"message": "xxx登录成功","data": {"age": 20,"name": "lily"}}# 校验规则
schema={"type":"object","properties":{"success":{"type":"boolean"},"code":{"type":"integer"},"message":{"pattern":"登录成功$"},"data":{"type":"object","properties":{"name":{"const":"lily"},"age":{"const":20}},"required":["name","age"]}},"required":["success","code","message","data"]
}res=jsonschema.validate(instance=data,schema=schema)
# 5.查看结果
print("校验结果res:",res)

相关文章:

  • 弄一个关于作文的网站怎么做引流推广广告怎么写
  • 长沙网站优化方式百度seo培训班
  • 做公司网站建设价格低网站权重查询
  • wordpress4.7.2东莞seo报价
  • 网站ssl证书怎么做郑州百度seo关键词
  • 做游戏赚钱的网站深圳网络推广服务是什么
  • [ linux-系统 ] 基础IO
  • 区间求最值问题高效解决方法
  • 仿Apple官网设计风格
  • 基于STM32的智能节能风扇的设计
  • IT运维效率提升: 当IT监控遇上3D可视化
  • Python 爬虫入门:从数据爬取到转存 MySQL 数据库
  • 深度学习入门--(二)感知机
  • VBA技术资料MF329:获得屏幕分辨率
  • 数据库1.0
  • 【请关注】实操mongodb集群部署
  • 迁移学习—基于猫狗数据集
  • SpringCloud系列(37)--搭建SpringCloud Gateway
  • 解释一下黑盒测试和白盒测试的区别?
  • 零基础入门Java+大模型(持续更新)
  • 创新让生活更美好丨“鑫亘科技亮相2025上海CMEF,创新医疗材料引领未来!”
  • 淘宝API安全合规指南:避免数据泄露与封禁
  • Encoder-only PLM RoBERTa ALBERT (BERT的变体)
  • 使用 Spread.net将 Excel 中的文本拆分为多段
  • EloqCloud for KV 初体验:兼容redis的云原生KV数据库
  • 《解锁前端潜力:自动化流程搭建秘籍》