Python-Loguru:让记录日志更装13

这篇具有很好参考价值的文章主要介绍了Python-Loguru:让记录日志更装13。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

今天勇哥来介绍一款让日志记录在 Python 中变得更加轻松愉快的库——Loguru。它提供了强大的功能和简洁的接口,使我们能够以更加灵活和直观的方式记录和管理日志信息,据说比logging快10倍!!

1. Loguru 简介

Loguru 是一个功能强大且易于使用的开源日志记录库。它建立在 Python 标准库中的 logging 模块之上,并提供了更加简洁直观的接口。使用 Loguru,我们可以轻松地记录不同级别的日志消息,并根据需求输出到终端、文件或其他目标。

2. Loguru 的安装

安装 Loguru 在命令行中运行以下命令:

pip install loguru

3. Loguru 的基本用法

首先,在代码的开头导入 Loguru 的 logger 对象:

from loguru import logger

然后,我们可以使用 logger.info()logger.warning() 等方法来记录不同级别的日志消息。例如:

logger.info("这是一条普通的信息日志")
logger.warning("这是一条警告日志")
logger.error("这是一条错误日志")

Loguru 会自动添加时间戳、日志级别和日志消息内容,并将其输出到终端。这样,我们就可以很方便地查看和追踪日志信息。

4. 日志文件的输出

调用 logger.add() 方法来配置文件输出。例如,将日志信息保存到 app.log 的文件中:

logger.add("app.log")

所有的日志信息都将写入到 app.log 文件中。

5. 高级配置

5.1 设置日志级别

logger.level() 方法设置日志的输出级别。默认级别为 INFO。例如,将日志级别设置为 DEBUG:

logger.level("DEBUG")

这样,所有 DEBUG 级别及以上的日志消息都会被输出。

5.2 自定义日志格式

Loguru 允许我们自定义日志的格式。调用 logger.add()方法并设置format 参数,可以指定日志的格式。例如:

logger.add("app.log", format="[{time:HH:mm:ss}] {level} - {message}")

5.3 添加日志切割

当日志文件过大时,我们可以通过添加日志切割选项来分割文件,以便更好地管理和维护。例如,将日志文件每天切割为一个新文件:

logger.add("app.log", rotation="00:00")

6. 实际应用场景

6.1 自动化测试

在自动化测试中,使用 Loguru,我们可以轻松地记录测试步骤、断言结果和异常信息。例如:

@logger.catch
def run_test():
logger.info("开始执行测试")
# 执行测试代码
assert some_condition, "条件不符合"
logger.info("测试通过")

run_test()

6.2 Web 应用程序

在 Web 应用程序中,Loguru 可以方便地集成到 Web 框架中,记录请求的路径、方法、参数等信息,以及响应的状态码和内容。例如:

@app.route("/api/data")
def get_data():
logger.info(f"收到请求:{request.path} [{request.method}]")
# 处理请求并返回响应
return jsonify(data)

7. 日志的封装

在实际应用中,我们最喜欢封装(逼格高),方便在不同模块和函数中重复使用。例如:

"""
@author: 测试玩家勇哥
@contact:262667641@qq.com
@file:mylogger.py
@time:2023/6/12 9:59
@desc: 日志封装
"""
import os
from functools import wraps
from time import perf_counter

from loguru import logger


# from loguru._logger import Logger


class MyLogger:
    """
    根据时间、文件大小切割日志
    """

    def __init__(self, log_dir='logs', max_size=20, retention='7 days'):
        self.log_dir = log_dir
        self.max_size = max_size
        self.retention = retention
        self.logger = self.configure_logger()

    def configure_logger(self):
        """

        Returns:

        """
        # 创建日志目录
        os.makedirs(self.log_dir, exist_ok=True)

        shared_config = {
            "level": "DEBUG",
            "enqueue": True,
            "backtrace": True,
            "format": "{time:YYYY-MM-DD HH:mm:ss} | {level} | {message}",
        }

        # 添加按照日期和大小切割的文件 handler
        logger.add(
            sink=f"{self.log_dir}/{{time:YYYY-MM-DD}}.log",
            rotation=f"{self.max_size} MB",
            retention=self.retention,
            **shared_config
        )

        # 配置按照等级划分的文件 handler 和控制台输出
        logger.add(sink=self.get_log_path, **shared_config)

        return logger

    def get_log_path(self, message: str) -> str:
        """
        根据等级返回日志路径
        Args:
            message:

        Returns:

        """
        log_level = message.record["level"].name.lower()
        log_file = f"{log_level}.log"
        log_path = os.path.join(self.log_dir, log_file)

        return log_path

    def __getattr__(self, level: str):
        return getattr(self.logger, level)

    def log_decorator(self, msg="快看,异常了,别唧唧哇哇,块排查"):
        """
         日志装饰器,记录函数的名称、参数、返回值、运行时间和异常信息
    Args:
        logger: 日志记录器对象

    Returns:
        装饰器函数

        """

        def decorator(func):
            @wraps(func)
            def wrapper(*args, **kwargs):
                self.logger.info(f'-----------分割线-----------')
                self.logger.info(f'调用 {func.__name__} args: {args}; kwargs:{kwargs}')
                start = perf_counter()  # 开始时间
                try:
                    result = func(*args, **kwargs)
                    end = perf_counter()  # 结束时间
                    duration = end - start
                    self.logger.info(f"{func.__name__} 返回结果:{result}, 耗时:{duration:4f}s")
                    return result
                except Exception as e:
                    self.logger.exception(f"{func.__name__}: {msg}")
                    self.logger.info(f"-----------分割线-----------")
                    # raise e

            return wrapper

        return decorator


if __name__ == '__main__':
    log = MyLogger()


    @log.log_decorator("勇哥也不知道错在哪里")
    def test_zero_division_error(a, b):
        return a / b


    for i in range(1000):
        log.error('错误信息')
        log.critical('严重错误信息')
        test_zero_division_error(1, 0)
        log.debug('调试信息')
        log.info('普通信息')
        log.success('成功信息')
        log.warning('警告信息')


总结

以上就是勇哥今天为各位小伙伴准备的内容,如果你想了解更多关于Python自动化测试的知识和技巧,欢迎关注我:公众号\博客\CSDN\B站:测试玩家勇哥;我会不定期地分享更多的精彩内容,如果有任何问题或建议,请随时留言讨论。谢谢大家的阅读!!

如果你对 Loguru 感兴趣,可以前往官方文档了解更多详细的信息。


最后

**我相信学习不是一朝一夕形成的,学习是一生的事业,坚持不懈,持续进步,为自己创造更美好的未来。****以上,共勉!
**


题外话,勇哥打算把新建的技术交流群,打造成一个活跃的高质量技术群。工作中遇到的技术问题,都可以在里面咨询大家,还有工作内推的机会。有兴趣的小伙伴,欢迎加我(记得备注是进群还是报名学习)👇👇👇****

👆****👆********👆长按上方二维码2秒,关注我


勇哥,10年落魄测试老司机,技术栈偏python,目前在一家超大型房产公司担任自动化测试主管,日常工作比较繁杂,主要负责自动化测试,性能测试、软件质量管理及人员管理。工作之余专注于为粉丝进行简历修改、面试辅导、模拟面试、资料分享、一对一自动化测试教学辅导等副业发展。目前已服务十多位小伙伴,取得高薪offer。

关注公众号,干货及时送达

往期精选文章👇:

python-Threading多线程之线程锁
Pytest 快速入门
pytest 前后置操作详谈
接口自动化之测试数据动态生成并替换
requests模块该如何封装?
最通俗易懂python操作数据库
python正则一篇搞掂
接口自动化如何封装mysql操作
性能测试之必备知识

性能分析思路文章来源地址https://www.toymoban.com/news/detail-480156.html

Python + ChatGPT来实现一个智能对话的钉钉机器人
一文看懂python如何执行cmd命令

到了这里,关于Python-Loguru:让记录日志更装13的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python中导入logru模块 报错 No module named loguru

    1、导入日志模块异常报错 报错信息: from loguru import logger E   ModuleNotFoundError: No module named  loguru 2、解决方案:安装logru 方案1:pycham编辑器 -- 文件 -- 设置  该方式有时候安装不成功 方案2:打开终端 pip install logru 该方式比较慢,偶尔也会出错 方案3:打开终端 pip install log

    2024年02月11日
    浏览(108)
  • Python3,能让我折服的库不多,Loguru算一个。

    小鱼 :小屌丝, 你在干啥呢? 小屌丝 :我在记录日志啊 。 小鱼 :… 小屌丝 :日志不都是需要记录的嘛。 小鱼 :日志确认需要记录,但是像你这种操作,并不多。 小屌丝 :…那你的意思, 还有更简单的操作方式??? 小鱼 :嗯… 可以这么说。 小屌丝 :那你还不赶紧

    2024年02月05日
    浏览(33)
  • 深入理解Python中的日志记录(Logging)

    🚀  个人主页 :xmp65535 🚀  专栏 :python技术专栏 目录 一、Python Logging 模块概述 二、相关组件 Logger Handler Formatter Filter LogRecord Level 三、基本配置 Formatters格式: 四、记录日志 五、日志记录者(Loggers) logging.getLogger(name=None) 六、处理器(Handlers) logging.Handler() RotatingFileHand

    2024年04月23日
    浏览(32)
  • python的opencv操作记录(13)-增强之直方图均衡化

    前段时间忙活深度网络和android的东西去了,好久没讲讲传统图像处理了,这一篇继续来说说opencv中的传统图像处理部分——图像增强之直方图增强。 图像增强是一种基本的图像处理操作,简单的来说就是把图像变的更清晰,或者说感兴趣的某个区域需要变的更加清晰。 而清

    2024年02月04日
    浏览(44)
  • python | Logging日志标准库的常见使用方法(手搓日志记录装饰器)

    日志级别从低到高分为: DEBUG INFO WARNING ERROR CRITICAL 使用前需要设置记录的日志级别,只有大等于该日志级别的日志才会被记录。 例如,设置日志级别为 WARNING ,则 WARNING 、 ERROR 、 CRITICAL 三种级别的日志才会被记录。 运行这段代码,可以在控制台看到以下输出: 可以自定义

    2024年02月11日
    浏览(38)
  • Python使用HTTP代理实现网络请求的调试和日志记录

    在Python中,使用HTTP代理可以实现网络请求的调试和日志记录。通过HTTP代理,我们可以拦截、修改或记录网络请求和响应的数据,以便更好地了解和调试网络请求。 下面是一个使用Python和 httplib2 库实现HTTP代理的示例,同时对请求和响应进行调试和日志记录: python 复制代码

    2024年01月19日
    浏览(62)
  • python3使用libpcap给ESL命令添加日志记录

    操作系统 :CentOS 7.6_x64 FreeSWITCH版本 :1.10.9 python版本:3.9.12 libpcap版本:1.11.0b7   FreeSWITCH的ESL模块用起来很方便,可以控制FreeSWITCH实现具体业务需求,但该模块没有提供ESL命令执行日志,不便于排查问题,本文展示一种使用python3基于libpcap实现ESL命令执行日志的方法,并提供

    2024年02月05日
    浏览(37)
  • nginx 查看日志 failed (13: Permission denied) 失败(13:权限被拒绝)解决

    权限被拒绝 用户不一致: 打开  nginx.conf 文件    (一般在  etc/nginx 目录下) 把  nginx 改为 root 用户已经统一,现在可以正常访问了    

    2024年02月15日
    浏览(80)
  • Loguru基本、进阶使用方法小结。

    loguru是一个开源的Python日志记录器,它提供了简单且易于使用的接口,同时具有高度的可定制性。loguru的特点包括:支持格式化日志、记录到文件或终端、支持自动清理日志、支持旋转日志等。 loguru的基本使用方法非常简单,只需要导入loguru模块,并使用logger函数创建一个日

    2024年02月16日
    浏览(36)
  • 【jvm系列-13】jvm性能调优篇---参数设置以及日志分析

    JVM系列整体栏目 内容 链接地址 【一】初识虚拟机与java虚拟机 https://blog.csdn.net/zhenghuishengq/article/details/129544460 【二】jvm的类加载子系统以及jclasslib的基本使用 https://blog.csdn.net/zhenghuishengq/article/details/129610963 【三】运行时私有区域之虚拟机栈、程序计数器、本地方法栈 https

    2024年02月06日
    浏览(75)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包