python接口自动化-logging日志

本文介绍了Python的logging模块,包括日志的五个级别(debug,info,warning,error,critical)及其用途,以及logging的四大组件(logger,handler,formatter,filter)。示例展示了如何创建和配置日志器,以及如何将其集成到代码中,以便在运行时记录错误和调试信息。文章还提供了将日志信息输出到控制台的实例,并讨论了日志设置的关键点。
摘要由CSDN通过智能技术生成

logging模块的日志级别:日志级别一共有5个从低到高如下, 作用是在当你给python函数赋予日志器时, 需要自己标记日志级别(后面会用到)

debug(调试级别):严重程度最低级别,详细程度最高的日志信息,常用于问题诊断

info(轻微级别):严重程度仅次于DEBUG,信息详细程度也仅次于DEBUG,通常只记录关键节点信息,用于确认一切是否按照我们预期的那样进行工作

warning(警告级别):当某些不期望的事情发生时记录的信息(如,磁盘可用空间较低),但是此时应用程序还是正常运行的

error(错误级别):由于一个更严重的问题导致某些功能不能正常运行时记录的信息

critical(严重错误级别):当发生严重错误,导致应用程序不能继续运行时记录的信息

python-logging四大组件:

logger:日志器, 提供应用程序代码直接使用的接口

handler:处理器,用于将日志记录发送到指定的目的位置

formater:格式器, 用于定义日志信息的输出格式

filter:过滤器, 过滤日志内容

编写第一个日志器:

import logging

# 创建日志器: logging_name(日志器名,可以随便写),一个日志器可以有多个处理器, 并且每个处理器都可以有自己不同的格式器及过滤器
logger = logging.getLogger('logging_name')

# 设置日志输出等级,如果不设置则默认warning级别,也就是只有日志级别为warning或则以上时,才会打印日志,否则不会打印,一般来说需要设置成 debug 打印全部级别
logger.setLevel(logging.DEBUG)

# 创建处理器:
sh = logging.StreamHandler()

# 创建格式器: 日志时间%(asctime)s、文件名%(filename)s、行%(lineno)d、日志级别%(levelname)s、事件内容%(message)s
ft = logging.Formatter(fmt='日志时间: %(asctime)s\n文件名: %(filename)s 在第%(lineno)d行\n日志级别: %(levelname)s\n事件内容: %('
                           'message)s\n', datefmt='%Y年%m月%d日 %X')

# 在日志器中添加处理器
logger.addHandler(sh)

# 将设置好的格式器添加到处理器中
sh.setFormatter(ft)

# 输出日志信息,事件内容需要自己写,这条代码放在哪个文件, 错误定位就会显示在哪个文件
logger.debug('事件内容')

执行结果>>>
日志时间: 2023年02月05日 17:52:25
文件名: test_003.py 在第23行
日志级别: DEBUG
事件内容: 事件内容

 上面说明了日志器的简单创建, 下面演示如何将日志器融入到自动化中

首先得将上面这个“线形日志器”封装一下,如下, 我将它封装到一个类中,然后将输出日志那行代码拿掉, 否则错误就会永远定位在日志函数文件。

import logging


class Log:
    def getlog(self):

        # 创建日志器: logging_name(日志器名,可以随便写),一个日志器可以有多个处理器, 并且每个处理器都可以有自己不同的格式器及过滤器
        logger = logging.getLogger('logging_name')

        # 设置日志输出等级,如果不设置则默认warning级别,也就是只有日志级别为warning或则以上时,才会打印日志,否则不会打印,一般来说需要设置成 debug 打印全部级别
        logger.setLevel(logging.DEBUG)

        # 创建处理器:
        sh = logging.StreamHandler()

        # 创建格式器: 日志时间%(asctime)s、文件名%(filename)s、行%(lineno)d、日志级别%(levelname)s、事件内容%(message)s
        ft = logging.Formatter(fmt='日志时间: %(asctime)s\n文件名: %(filename)s 在第%(lineno)d行\n日志级别: %(levelname)s\n事件内容: %('
                                   'message)s\n', datefmt='%Y年%m月%d日 %X')

        # 在日志器中添加处理器
        logger.addHandler(sh)

        # 将设置好的格式器添加到处理器中
        sh.setFormatter(ft)

        return logger

如下, 我又定义了一个测试用例和一个公用函数 comparison ,公用函数的功能就是输入“中文”就可以执行成功, 输入数字就会报错

def comparison(da):
    if da in '中文':
        return '函数执行成功,是中文'

# 测试模块
class TestC:
    # 测试用例
    def test001(self):
        print(comparison(1))

TestC().test001()

我的想法很简单,就是想把日志器加入到 comparison 函数中,如果报错了,我希望知道它的报错时间、报错文件、报错所在行,报错级别、报错内容。成功的话我也需要知道它的时间、文件、行、级别、内容。如何实现?很简单,将公用函数改造一下即可,如下

# 首先将日志类函数导入
from test_001 import Log

def comparison(da):

    try:
        if da in '中文':
            # 成功的情况
            Log().getlog().info(f'正在执行 comparison 函数,暂无错误,对比值为{da}:中文')
            return '函数执行成功,是中文'
    except Exception:
        # 报错的情况
        Log().getlog().error(f'正在执行 comparison 函数,类型对比错误,对比值为{da}:中文')

# 测试模块
class TestC:
    # 测试用例
    def test001(self):
        comparison(1)


TestC().test001()


执行结果>>>
日志时间: 2023年02月05日 17:49:29
文件名: test_002.py 在第13行
日志级别: ERROR
事件内容: 正在执行 comparison 函数,类型对比错误,对比值为1:中文

可以看到,输入1与中文比较, 系统正确的打印日志信息

以上就是对日志模块- logging 的使用说明, 日志模块难点不是在代码, 而是日志设置点, 也就是在哪里将日志植入才是最好的, 日志器的植入函数最好是公用的,以及最容易报错的地方,就想摄像头要安装最容易出事的地方,出现问题后才能最快去定位。以上讲解是将日志器在控制台输出,还有将日志写入文件形式,后续讲解...... 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

好度

你的鼓励是我最大的创作动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值