Python 您所在的位置:网站首页 python输出htm Python

Python

2023-06-16 15:35| 来源: 网络整理| 查看: 265

“ 今天勇哥来介绍一款让日志记录在 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} [{requesthod}]") # 处理请求并返回响应 return jsonify(data) 7. 日志的封装

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

""" @author: 测试玩家勇哥 @contact:[email protected] @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操作性能测试之必备知识

性能分析思路

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

本文来自博客园,作者:测试玩家勇哥,转载请注明原文链接:https://www.cnblogs.com/Nephalem-262667641/p/17475549.html



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有