loguru 由简入繁

17 篇文章 0 订阅

loguru 日志管理模块

1. 基础使用:

from loguru import logger

logger.add(time.strftime(f'./log/device_set_log_%Y%m%d.log'))

2. 日志分级

Level NameSeverty ValueLogger Method
TRACE5logger.trace()
DEBUG10logger.debug()
INFO20logger.info()
SUCCESS25logger.success()
WARING30logger.waring()
ERROR40logger.error()
CRITICAL50logger.critical()

3. 分割日志

  • 根据大小分割日志
logger.add("file_1.log", rotation="500 MB")    # Automatically rotate too big file
  • 根据时间分割日志
logger.add("file_2.log", rotation="12:00")  # New file is created each day at noon

logger.add("/data/log/demo/demo.{time:YYYY-MM-DD}.log", rotation="12:00")  # New file is created each day at noon

logger.add("file_3.log", rotation="1 week")  # Once the file is too old, it's rotated

logger.add("file_X.log", retention="10 days")  # Cleanup after some time

logger.add("file_Y.log", compression="zip")  # Save some loved space

4. 日志保存时长

保留 15 天

logger.add('runtime_{time}.log', retention='15 days')

保留 15 个

logger.add('runtime_{time}.log', retention=10)

保留 15 个小时

import datetime
from loguru import logger

logger.add('runtime_{time}.log', retention=datetime.timedelta(hours=5))

5. 日志压缩

支持的压缩格式:gz、bz2、xz、lzma、tar、tar.gz、tar.bz2、tar.xz

logger.add('runtime_{time}.log', compression='zip')

6. 日志重定向

  logger 默认采用 sys.stderr 标准错误输出将日志输出到控制台中

  移除已有的日志处理对象 logger.remove(handler_id=None)

7. 常用参数解析

参数说明
sink可以传入一个 file 对象(file-like object),
或一个 str 字符串或者 pathlib.Path 对象,
或一个方法(coroutine function),
或 logging 模块的 Handler(logging.Handler)。
level (int or str, optional)应将已记录消息发送到接收器的最低严重级别。
format (str or callable, optional)格式化模块,在发送到接收器之前,使用模板对记录的消息进行格式化。
filter (callable, str or dict, optional)用于决定每个记录的消息是否应该发送到接收器。
colorize (bool, optional)是否应将格式化消息中包含的颜色标记转换为用于终端着色的Ansi代码,或以其他方式剥离。如果None,根据水槽是否为TTY自动作出选择。
serialize (bool, optional)在发送到接收器之前,记录的消息及其记录是否应该首先转换为JSON字符串。
backtrace (bool, optional)格式化的异常跟踪是否应该向上扩展,超出捕获点,以显示生成错误的完整堆栈跟踪。
diagnose (bool, optional)异常跟踪是否应该显示变量值以简化调试。在生产中,这应该设置为“False”,以避免泄漏敏感数据。
enqueue (bool, optional)要记录的消息在到达接收器之前是否应该首先通过多进程安全队列。当通过多个进程将日志记录到文件中时,这是非常有用的。这还具有使日志调用非阻塞的优点。
catch (bool, optional)是否应该自动捕获接收器处理日志消息时发生的错误。如果True上显示异常消息 sys.stderr。但是,异常不会传播到调用者,从而防止应用程序崩溃。

如果当接收器(sink)是文件路径( pathlib.Path )时,可以应用下列参数,同时add() 会返回与所添加的接收器相关联的标识符

参数说明
rotation分隔日志文件,何时关闭当前日志文件并启动一个新文件的条件,周期性的创建日志文件,或者按照文件大小自动分隔日志文件
例如,“500 MB”、“0.5 GB”、“1 month 2 weeks”、“10h”、“monthly”、“18:00”、“sunday”、“monday at 18:00”、“06:15”
retention (str, int, datetime.timedelta or callable, optional)可配置旧日志的最长保留时间,周期性的去清除,避免日志堆积,浪费存储空间。
例如,“1 week, 3 days”、“2 months”
compression (str or callable, optional)日志文件在关闭时应转换为的压缩或归档格式
例如,“gz”、“bz2”、“xz”、“lzma”、“tar”、“tar.gz”、“tar.bz2”、“tar.xz”、“zip”
delay (bool, optional)是否应该在配置了接收器之后立即创建文件,或者延迟到第一个记录的消息。默认为’ False '。
mode (str, optional)与内置open()函数一样的打开模式。默认为’ “a”(以附加模式打开文件)。
buffering (int, optional)内置open()函数的缓冲策略,它默认为1(行缓冲文件)。
encoding (str, optional)文件编码与内置的’ open() ‘函数相同。如果’ None ',它默认为’locale.getpreferredencoding() 。

8. 日志格式化常用的属性

KeyDescription
elapsed从程序开始经过的时间差
exception格式化异常(如果有),否则为’ None ’
extra用户绑定的属性字典(参见bind())
file进行日志记录调用的文件
function进行日志记录调用的函数
level用于记录消息的严重程度
line源代码中的行号
message记录的消息(尚未格式化)
module进行日志记录调用的模块
name进行日志记录调用的__name__
process进行日志记录调用的进程名
thread进行日志记录调用的线程名
time发出日志调用时的可感知的本地时间
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值