logging日志模块

logging日志模块

在写代码或者测试程序的时候 需要调试一下 经常要print输出看看 对不对 但是当需要查看大量信息时 或者要保存到文件中 print就u不适用了 使用logging日志模块可以及那个输出的日志信息保存下来

logging模式使用基本结构

先写一个简单的logging日志 代码看一下 它的结构是怎样的

首先导入该模块 然后调用方法 在方法传递参数 (basicConfig的参数是关键字动态参数**kwargs)

下方代码中 basicConfig 传递两个参数 level: 日志的级别 filename:日志保存的路径

最后输出日志内容

import logging#导入日志模块
logging.basicConfig(
    level=logging.INFO, #设置日志的级别
    filename="data/log.log"#日志保存的位置
)
logging.info("调试日志")#日志输出的内容

执行完成后在data目录下 找到并打开log.log文件 就会看到输出的内容 (注意: 查看日志是编码是GBK 如果是UTF-8可能会乱码)

日志的级别

级别排序:CRITICAL > ERROR > WARNING > INFO > DEBUG

级别的含义:

debug : 输出全部的日志,详细的信息 一般是调试

info : 打印info,warning,error,critical级别的日志,确认一切按预期运行

WARNING :打印warning,error,critical级别的日志程序未按预期运行时使用,但并不是错误,

ERROR :打印error,critical级别的日志,更严重的问题 程序出错误时使用,如:IO操作失败

CRITICAL : 打印critical级别,一个严重的错误,这表明程序本身可能无法继续运行

输入不同级别的日志

输出一下 不同级别日志的效果

import logging
logging.debug("deDUB")
logging.info("info ")
logging.warning("warning")
logging.error("error")
logging.critical("critical")

>>>WARNING:root:warning
>>>ERROR:root:error
>>>CRITICAL:root:critical

可以看到 在 控制台中 只输出了 高于warning级别的日志 低于warning级别的就不在控制台输出了 只能记录在文件中查看

将低级别日志也输出到控制台

如果想使用低级别的日志 输出到控制台去做调试 ,level 可以引入NOTSET级别来显示:

import logging#导入日志模块
logging.basicConfig(
    level=logging.NOTSET, #设置日志的级别
)
logging.debug("调试日志")#日志输出的内容
>>>调试日志

将级别设置成NOTSET 后 低级别的 日志也可以输出在控制台中了

format日志的内容格式

参数内容
message日志内容
asctime日志时间
levelname日志的等级
filename文件名
lineno文件中的行号
时间显示

之前输出的日志 没有时间日期 所以在以后查看的时候 会不太友好 因此需要在日志内加上时间格式

输入当前日期到控制台中

basicConfig 再传递一个参数format :格式化一个时间模块

import logging#导入日志模块
logging.basicConfig(
    level=logging.NOTSET, #设置日志的级别
    format="%(asctime)s"#日志的时间格式
)
logging.debug("日志内容")#日志输出的内容

>>>2020-05-19 14:06:35,750

上面就输出了当前的时间

输出时间和日志内容

上面只能输出时间 现在需要将时间和日志的内容一起输出出来

在format后加上message 控件指定消息框所显示的消息

import logging#导入日志模块
logging.basicConfig(
    level=logging.NOTSET, #设置日志的级别
    format="%(asctime)s: %(message)s"#日志的时间格式和日志内容
)
logging.debug("日志内容")#日志输出的内容

>>>2020-05-19 15:08:26,221: 日志内容
输出日志等级

在输出的日志格式中增加日志的等级 basicConfig的参数format加上%(levelname)s 即可

import logging#导入日志模块
logging.basicConfig(
    level=logging.NOTSET, #设置日志的级别
    format="%(asctime)s: %(levelname)s: %(message)s"#日志的时间格式 日志等级 日志内容
)
logging.debug("日志内容")#日志输出的内容

>>>2020-05-19 15:55:20,970: DEBUG: 日志内容
输入该日志所在行

在日志增加所在行 更利于查询问题所在

在输出的日志格式中增加日志的等级 basicConfig的参数format加上lineno 即可

import logging#导入日志模块
logging.basicConfig(
    level=logging.NOTSET, #设置日志的级别
    format="%(asctime)s: %(levelname)s: %(lineno)s  %(message)s"#日志的时间格式 日志等级 日志内容及所在行
)
logging.debug("日志内容")#日志输出的内容

>>>2020-05-19 18:07:15,238: DEBUG: 17  日志内容

输出 日志内容在17行

通过现在的输出的日志就可以看出在什么时间 发生什么等级的事件 在哪一行 什么内容

这样的日志就比较清晰了

以上已经完成了日志记录的基本用法 现在就在接口测试中进行运用一下

在接口测试中使用日志记录

测试一个接口将结果输出到日志中

发送正常的接口请求

import logging#导入日志模块
import requests
logging.basicConfig(
    level=logging.NOTSET, #设置日志的级别
    filename=("data/log.log"),
    format="%(asctime)s: %(levelname)s:%(lineno)s  %(message)s"
)
# logging.debug("日志内容")#日志输出的内容

def test_API():
    r = requests.post(
        "http://127.0.0.1:5000/index/info",
        headers={
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.113 Safari/537.36"
        }
    )
    logging.info(r.status_code)#将响应状态码输出到日志中
    logging.info(r.json()['msg'])#将msg字段对应的值输出到日志中
test_API()

然后打开data目录下的log文件

2020-05-20 11:59:31,546: DEBUG:205  Starting new HTTP connection (1): qgyilingmuyan.com:80
2020-05-20 11:59:31,635: DEBUG:393  http://127.0.0.1:5000 "POST /index/info HTTP/1.1" 200 None
2020-05-20 11:59:31,648: INFO:17  200
2020-05-20 12:07:38,121: INFO:18  获取成功

日志中显示响应状态码是200 msg字段对应的值是:获取成功

发送一个错误的请求

上面试过了正常的发送API请求 查看日志是正常的 那么现在试试故意把请求地址改错看看 日志输出

请求地址改错一个字符 看看

import logging#导入日志模块
import requests
logging.basicConfig(
    level=logging.NOTSET, #设置日志的级别
    filename=("data/log.log"),
    format="%(asctime)s: %(levelname)s:%(lineno)s  %(message)s"
)
# logging.debug("日志内容")#日志输出的内容

def test_API():
    r = requests.post(
        "http://127.0.0.2:5000/ndex/info",
        headers={
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.113 Safari/537.36"
        }
    )
    logging.info(r.status_code)
    logging.info(r.json()['msg'])
test_API()

再次打开日志文件 可以看到响应状态码是404

2020-05-20 12:22:52,316: DEBUG:205  Starting new HTTP connection (1):127.0.0.1:5000
2020-05-20 12:22:52,376: DEBUG:393  http://127.0.0.1:5000 "POST ndex/info HTTP/1.1" 404 None
2020-05-20 12:22:52,380: INFO:17  404

上面错误的请求 只能输出状态码 现在想要把控制台中的报错信息也输出到日志中

将报错的信息输出到日志中

把可能出错的代码放在try中 然后 捕获异常 将出错的信息记录下来

import logging#导入日志模块
import requests
logging.basicConfig(
    level=logging.INFO, #设置日志的级别
    filename=("data/log.log"),
    format="%(asctime)s: %(levelname)s:%(lineno)s : %(message)s"
)
# logging.debug("日志内容")#日志输出的内容

def test_API():
    try:
        r = requests.post(
            "http://127.0.0.1:5000/indeX/info",
            headers={
                "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.113 Safari/537.36"
            }
        )
        logging.info(r.status_code)
        logging.info(r.json())
    except Exception as e:
        logging.error("出错",exc_info = 1)#记录报错的信息

test_API()

再次打开log文件 就可以看到报错信息了

2020-05-20 14:12:03,397: INFO:18 : 404
2020-05-20 14:12:03,400: ERROR:21 : 出错
Traceback (most recent call last):
  File "D:/demo2/day1/TCP.py", line 19, in test_API
    logging.info(r.json())
  File "C:\Users\root\AppData\Local\Programs\Python\Python37\lib\site-packages\requests\models.py", line 897, in json
    return complexjson.loads(self.text, **kwargs)
  File "C:\Users\root\AppData\Local\Programs\Python\Python37\lib\json\__init__.py", line 348, in loads
    return _default_decoder.decode(s)
  File "C:\Users\root\AppData\Local\Programs\Python\Python37\lib\json\decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "C:\Users\root\AppData\Local\Programs\Python\Python37\lib\json\decoder.py", line 355, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值