Python记录日志模块推荐-loguru!

前言

在做项目的时候一直在用Python自带的模块logging,进行日志的记录,虽然他们满足我大部分的要求,但是还是有很多缺点,例如需要额外的配置、不能自动删除时间久的日志文件等等。
在这里插入图片描述
难道真的没有比较好的第三方模块吗。。。。。于是我在网上langlanglang…咦?还真到了一个比较好的模块来记录日志。他就是今天我们的主角—loguru!!

一、安装loguru

pip install loguru

二、基本使用

from loguru import loggerlogger.debug('this is a debug message')

运行结果如下:在这里插入图片描述
从结果可以得知,不需要配置什么东西,然后调用其 debug方法即可。在 loguru 里面有且仅有一个主要对象,那就是 logger.loguru 里面有且仅有一个 logger,而且它已经被提前配置了一些基础信息,比如比较友好的格式化、文本颜色信息等等。

三、详细使用

既然是日志,那么最常见的就是输出到文件了。loguru 对输出到文件的配置有非常强大的支持,比如支持输出到多个文件,分级别分别输出,过大创建新文件,过久自动删除等等。下面我们分别看看这些怎样来实现,这里基本上就是 add 方法的使用介绍。
1.输出日志到文件,记录日志的等级,编码格式

import os
from loguru import logger
# logger.debug('this is a debug message')
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
# 日志文件配置
LOG_DIR = os.path.join(BASE_DIR,'log')
if os.path.exists(LOG_DIR) is False:
    os.makedirs(LOG_DIR)
logger.add(os.path.join(LOG_DIR,'error.log'),encoding='utf-8',level="INFO")

2.rotation 配置

用了 loguru 我们还可以非常方便地使用rotation 配置,比如我们想一天输出一个日志文件,或者文件太大了自动分隔日志文件,我们可以直接使用 add 方法的 rotation 参数进行配置

#输出到文件"error2020-09-21_16-08-52_714738.log",
logger.add(os.path.join(LOG_DIR,'error{time}.log'),rotation="500 MB",level="WARNING",encoding='utf-8')

通过这样的配置我们就可以实现每 500MB 存储一个文件,每个 log 文件过大就会新创建一个 log 文件。我们在配置 log 名字时加上了一个 time 占位符,这样在生成时可以自动将时间替换进去,生成一个文件名包含时间的 log 文件。另外我们也可以使用 rotation 参数实现定时创建 log 文件,例如:

logger.add('runtime_{time}.log', rotation='00:00') #实现每天 0 点新创建一个 log 文件输出了。

另外我们也可以配置 log 文件的循环时间,比如每隔一周创建一个 log 文件,写法如下:

logger.add(os.path.join(LOG_DIR,'error.log'),rotation='1 week',encoding='utf-8') #实现 1 day 1 week 1 hour 即多久生成一个新的文件

3.retention 配置

很多情况下,一些非常久远的 log 对我们来说并没有什么用处了,它白白占据了一些存储空间,不清除掉就会非常浪费。retention 这个参数可以配置日志的最长保留时间。

logger.add(os.path.join(LOG_DIR,'error.log'),rotation='1 day',retention='30 days',encoding='utf-8')

这样log 文件里面就会保留最新 30 天的, log会自动清理一个月之前的日志

4.compression 配置

loguru 还可以配置文件的压缩格式,这样可以更加节省存储空间,比如使用 zip 文件格式保存,示例如下:

logger.add(os.path.join(LOG_DIR,'error.log'),rotation='1 day', compression='zip',retention='30 days',encoding='utf-8')
  

5.enqueue配置

loguru可以配置在多进程同时往日志文件写日志的时候使用队列达到异步功效。

logger.add(os.path.join(LOG_DIR,'error.log'), enqueue=True)  # 异步写入

6.Traceback 记录

在很多情况下,如果遇到运行错误,而我们在打印输出 log 的时候万一不小心没有配置好 Traceback 的输出,很有可能我们就没法追踪错误所在了。

但用了 loguru 之后,我们用它提供的装饰器就可以直接进行 Traceback 的记录,例如:

import os
from loguru import logger
# logger.debug('this is a debug message')
 
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
# 日志文件配置
LOG_DIR = os.path.join(BASE_DIR,'log')
 
if os.path.exists(LOG_DIR) is False:
    os.makedirs(LOG_DIR)
logger.add(os.path.join(LOG_DIR,'error.log'),rotation='1 day',retention='30 days',encoding='utf-8',level="INFO")
@logger.catch
def func():
    print(a)

func()
logger.warning("程序走到这里了")

error.log日志文件如下:

2020-09-24 16:50:58.398 | ERROR    | __main__:<module>:17 - An error has been caught in function '<module>', process 'MainProcess' (42920), thread 'MainThread' (42252):
Traceback (most recent call last):
> File "D:/project/loguru_demo.py", line 17, in <module>
    func()<function func at 0x00000261BF734268>
  File "D:/project/loguru_demo.py", line 15, in func
    print(a)
NameError: name 'a' is not defined
2020-09-24 16:50:58.792 | WARNING  | __main__:<module>:18 - 程序走到这里了

很明显,程序的报错位置追踪到了,也没有影响程序接下来的正常运行。

四、结语

到这之后呢,已将loguru记录日志的方法已经基本介绍完毕,具体详细的课查看官方网站==>>官方文档:

作者:小张学Python
本文链接: https://mp.weixin.qq.com/s/dkNkEohPl6H2VopUrpxxZg
转载请注明来源!!
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Python Loguru 是一个易于使用的日志库,它提供了简洁的语法和强大的功能,可以帮助开发者在应用程序中记录和管理日志Loguru 具有以下特点: 1. 简洁的语法:Loguru 提供了简单直观的 API,使得记录日志变得轻而易举。开发者可以使用类似于 print 函数的语法来记录日志,而无需担心繁琐的配置。 2. 强大的功能:Loguru 支持将日志输出到控制台、文件、网络和其他自定义目标。开发者可以根据自己的需求配置不同的输出方式和格式。 3. 自动回滚:Loguru 具备自动回滚功能,可以根据配置的大小或时间进行日志文件的分割和归档,避免日志文件过大或过长。 4. 异常追踪:Loguru 提供了异常追踪功能,可以方便地记录和追踪应用程序中的异常信息,帮助开发者快速定位和修复问题。 5. 上下文管理:Loguru 支持上下文管理,可以在日志中添加上下文信息,如请求 ID、用户 ID 等,方便开发者跟踪和调试应用程序。 使用 Loguru 非常简单,只需要在代码中导入 loguru 模块,并使用 loguru.logloguru.logger 对象来记录日志即可。 下面是一个使用 Loguru 记录日志的示例: ```python import loguru loguru.logger.add("file.log") # 将日志输出到文件 loguru.logger.info("This is an info message") # 记录一条信息日志 loguru.logger.warning("This is a warning message") # 记录一条警告日志 loguru.logger.error("This is an error message") # 记录一条错误日志 ``` 以上是 Loguru 的一些基本用法,你还可以通过配置文件或函数参数来自定义日志记录的行为。详细的用法和更多功能请参考 Loguru 官方文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小张学Python

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

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

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

打赏作者

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

抵扣说明:

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

余额充值