学习python自动化——log日志

一、log日志

  1.1、从代码里收集过来,用来还原用户行为
  1.2、python自带的库

import logging

  1.3、日志打印原则:只打印关键信息(能够还原用户行为的关键信息)

  1.4、自动化测试关键信息
    1)请求地址
    2)请求方式
    3)请求时间
    4)请求参数
    5)断言
    6)日志级别
    7)响应结果
  1.5、日志级别
    debug < info < warning < error < critical

    debug级别是最高,最优先输出的,但严重程度是最低的

    当日志级别是debug时,优先输出debug程度,但也包括了info、warning、error、critical严重程度的日志

    当日志级别是warning时,优先输出warning 程度,但也包括了error、critical严重程度的日志

  1.6、日志级别选择

    一般程序正常运行产生的日志:info

    调试、打断点的日志:debug
  1.7、日志设置级别:logging.basicConfig(level=logging.日志级别)

logging.basicConfig(level=logging.DEBUG)    #设置debug级别,日志级别需要大写

  1.8、日志信息:logging.日志级别(输出的日志信息)

logging.info('python')    #输出python的日志信息

二、日志收集器步骤

import logging
from logging import handlers

#创建日志收集器
py_39=logging.getLogger(name='py39')

#创建日志收集渠道
pycham=logging.StreamHandler() #控制台渠道

file=handlers.TimedRotatingFileHandler(filename='python1.log',when='D',interval=1,backupCount=5,encoding='utf-8') #按时间收集

#日志格式
fmt='%(asctime)s-%(name)s-%(levelname)s-%(filename)s-%(funcName)s-[line:%(lineno)d]:%(message)s'
log_fmt=logging.Formatter(fmt=fmt)

#日志级别:收集器、渠道,可以不同的渠道输出日志级别不一样
py_39.setLevel(logging.DEBUG)

#给渠道添加日志格式
pycham.setFormatter(fmt=log_fmt)
file.setFormatter(fmt=log_fmt)

#渠道与收集器绑定
py_39.addHandler(pycham)
py_39.addHandler(file)
py_39.info('test')


  2.1、创建日志收集器:日志收集器=logging.getLogger(name=日志收集器名字)

py_39=logging.getLogger(name='py39')       #name:日志收集器名字

  2.2、创建日志收集渠道
    2.2.1、文件渠道
      1)收集所有日志

file=logging.FileHandler(filename='python1.log',encoding='utf-8')       #一个日志文件收集所有的日志,无法按日期生成

      2)按文件大小收集日志

from logging import handlers
#maxBytes:保留文件大小,backupCount:保留历史记录数,默认0时表示不保留,直接覆盖掉
file=handlers.RotatingFileHandler(filename='python1.log',maxBytes=1,backupCount=5,encoding='utf-8')

      3)按时间收集日志

from logging import handlers
#when取值:
# S - Seconds:秒
# M - Minutes:分
# H - Hours:小时
# D - Days:天(常用)
# midnight - roll over at midnight:午夜,23点59分59秒
# W{0-6} - roll over on a certain day; 0 - Monday:星期日到星期六
#interval:拆分次数,如when=D,interval=1表示按1天切换一次日志
file=handlers.TimedRotatingFileHandler(filename='python1.log',when='S',interval=1,backupCount=5,encoding='utf-8')

    2.2.2、控制台渠道:渠道=logging.StreamHandler()

pycham=logging.StreamHandler()      #创建日志收集渠道,将日志输出到控制台

    2.2.3、收集器与渠道的关系
      1)收集器只负责收集日志信息
      2)渠道负责输出日志信息
    2.2.4、日志格式与渠道的关系
      1)日志格式相当于渠道的一个属性
  2.3、创建日志格式:日志格式=logging.Formatter(fmt=格式)

  •     %(name)s :logger的名字
  •     %(levelno)s :数字形式的日志级别
  •     %(levelname)s :文本形式的日志级别
  •     %(pathname)s : 调用日志输出函数的模块的完整路径名
  •     %(filename)s : 调用日志输出函数的模块的文件名
  •     %(module)s :调用日志输出函数的模块名
  •     %(lineno)d :调用日志输出函数的语句所在代码行
  •     %(funcName)s :调用日志输出函数的函数名
  •     %(created)f :当前时间
  •     %(asctime)s :字符串形式的当前时间
  •     %(msecs)d :毫秒
  •     %(relativeCreated)d : 输出日志信息时,自logger创建以来的毫秒数
  •     %(thread)d :线程ID
  •     %(threadName)s :线程名
  •     %(process)d : 进程ID
  •     %(message)s :用户输出的消息
fmt='%(asctime)s-%(name)s-%(levelname)s-%(filename)s-%(funcName)s-[line:%(lineno)d]:%(message)s'      #日志格式
log_fmt=logging.Formatter(fmt=fmt)

  2.4、设置日志级别:收集器/渠道.setLevel(logging.日志级别)

    1)收集器设置日志级别

#日志级别:收集器、渠道,可以不同的渠道输出日志级别不一样
py_39.setLevel(logging.DEBUG)    #收集器设置日志级别

    2)渠道设置日志级别

pycham.setLevel(logging.INFO)      #控制台渠道设置日志级别

  2.5、给渠道添加日志格式:渠道.setFormatter(fmt=日志格式)

    1)控制台渠道添加日志格式

#给控制台渠道添加日志格式
pycham.setFormatter(fmt=log_fmt)    

    2)文件渠道添加日志格式

file.setFormatter(fmt=log_fmt)

  2.6、收集器与渠道绑定:日志收集器.addHandler(渠道)
    1)与控制台渠道绑定

py_39.addHandler(pycham)

    2)与文件渠道绑定

py_39.addHandler(file)

三、log封装

import logging
from logging import handlers

def handle_log():
#创建日志收集器
py_39=logging.getLogger(name='py39')

#创建日志收集渠道
pycham=logging.StreamHandler()
file=handlers.TimedRotatingFileHandler(filename='python1.log',when='D',interval=1,backupCount=5,encoding='utf-8') #按天收集

#日志格式
fmt='%(asctime)s-%(name)s-%(levelname)s-%(filename)s-%(funcName)s-[line:%(lineno)d]:%(message)s'
log_fmt=logging.Formatter(fmt=fmt)

#日志级别:收集器、渠道,可以不同的渠道输出日志级别不一样
py_39.setLevel(logging.DEBUG)

#给渠道添加日志格式
pycham.setFormatter(fmt=log_fmt)
file.setFormatter(fmt=log_fmt)

#渠道
py_39.addHandler(pycham)
py_39.addHandler(file)
return py_39

my_logger=handle_log()      #在封装里直接实例化,后续使用时在导入模块里直接导入my_logger,如果后续使用时导入handle_log,再实例化,会重复输出日志
posted @ 2022-06-23 00:00  芒果93  阅读(1312)  评论(0编辑  收藏  举报