Python方便又强大的日志记录器——loguru

2023-11-17

Python方便又强大的日志记录器——loguru

Loguru是一个旨在使Python日志记录变得愉快的库。该库通过添加一系列有用的功能来解决标准记录器的警告,从而减少Python日志记录的痛苦。

日志记录对每个应用程序都是基本的,它简化了调试过程。在应用程序中使用日志应该是一种自动化,Loguru试图让它既愉快又强大。

优点:

  • loguru的核心是只有一个记录器,默认是stderr

  • 记录器只是一个接口,它将日志消息分派给已配置的处理程序。如何添加处理程序?如何设置日志格式?如何过滤邮件?如何设置级别? 答案:add()函数
    logger.add(sys.stderr, format=“{time} {level} {message}”, filter=“my_module”, level=“INFO”)

  • 取代默认的stderr处理程序,只需调用logger.remove()

  • 将日志记录到文件
    logger.add(“file_{time}.log”)
    logger.add(“file_1.log”, rotation=“500 MB”) # 文件过大时自动滚动
    logger.add(“file_2.log”, rotation=“12:00”) # 每天中午12:00创建新文件
    logger.add(“file_3.log”, rotation=“1 week”) # 超过一周,自动创建新文件
    logger.add(“file_X.log”, retention=“10 days”) # 一段时间10天后清除
    logger.add(“file_Y.log”, compression=“zip”) # 压缩节省空间
    logger.info(“If you’re using Python {}, prefer {feature} of course!”, 3.6, feature=“f-strings”) # 有比%更强大的格式化,{}占位符

  • 线程或主线程内异常捕获
    @logger.catch
    def my_function(x, y, z):
    return 1 / (x + y + z)

  • 用颜色记录日志
    logger.add(sys.stdout, colorize=True, format=“{time} {message}”)

  • 异步,进程安全,多线程安全的记录日志,通过排队的方式记录日志
    logger.add(“somefile.log”, enqueue=True)

  • 希望日志序列化以便于分析或传递:使用serialize参数,每个日志消息将在发送到配置的接收器之前转换为JSON字符串。
    logger.add(custom_sink_function, serialize=True)

  • 使用bind记录日志上下文
    logger.add(“file.log”, format=“{extra[ip]} {extra[user]} {message}”)
    context_logger = logger.bind(ip=“192.168.0.1”, user=“someone”)
    context_logger.info(“Contextualize your logger easily”)
    context_logger.bind(user=“someone_else”).info(“Inline binding of extra attribute”)
    context_logger.info(“Use kwargs to add context during formatting: {user}”, user=“anybody”)

  • 使用contextualize()临时修改上下文本地状态:

  • 通过结合bind()和filter,可以对日志进行更细粒度的控制:
    logger.add(“special.log”, filter=lambda record: “special” in record[“extra”])
    logger.debug(“This message is not logged to the file”)
    logger.bind(special=True).info(“This message, though, is logged to the file!”)

  • patch()方法允许动态值附加到每个新消息的记录dict
    logger.add(sys.stderr, format=“{extra[utc]} {message}”)
    logger = logger.patch(lambda record: record[“extra”].update(utc=datetime.utcnow()))

  • 希望在生产中记录详细信息而不降低性能,可以使用opt()方法来实现这一点
    logger.opt(lazy=True).debug(“If sink level <= DEBUG: {x}”, x=lambda: expensive_function(2 ** 64))

  • opt()有很多用途
    logger.opt(exception=True).info(“Error stacktrace added to the log message (tuple accepted too)”) # 错误堆栈跟踪添加到日志消息
    logger.opt(colors=True).info(“Per message colors”)
    logger.opt(record=True).info(“Display values from the record (eg. {record[thread]})”)
    logger.opt(raw=True).info(“Bypass sink formatting\n”)
    logger.opt(depth=1).info(“Use parent stack context (useful within wrapped functions)”)
    logger.opt(capture=False).info(“Keyword arguments not added to {dest} dict”, dest=“extra”)

    new_level = logger.level(“SNAKY”, no=38, color=“”, icon=“

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python方便又强大的日志记录器——loguru 的相关文章

随机推荐

  • 【算法】Shell排序--C++源代码(VS2015)

    include
  • tensorflow导入错误“ImportError: DLL load failed”(已解决)

    毕业论文需要用到tensorflow 然鹅我却卡在了安装 由于各种问题还自身的拖延症与它 斗争 了一周 终于安装成功了 我一定要记录下来这血泪史 这篇笔记也拖了好几天 如果你也遇到下面的问题 就继续往下看吧 直接 pip install t
  • Docker网络理解(1)

    2017 02 17 我注意到 很多大型的企业公司在提供云计算服务的时候 必然要对各个不同的租户进行隔离 这就和OpenStack一样了 需要一个网络拓扑的设计 所以前面对网络的理解是很有用的 后续对这个隔离应用来说 我所知道的就是用OVS
  • 记一次windows下Netty做为压测端引发的错误 No buffer space available (maximum connections reached?): bind

    最近写了个客户端压测工具结果每次压到将近5000时就会报错 也是搞了两天才发现问题 主要是错误表现和网上大多数人的表现一样 导致忽略了眼前的错误提示 错误表现具体如下 java lang IllegalStateException fail
  • 兔队线段树:楼房重建

    https www luogu com cn problem P4198 本质 在线段树上每个节点维护信息时再深入到底部 加个 log log log O n
  • Promise,async,await

    什么是Promise Promise 简单说就是一个容器 里面保存着某个未来才会结束的事件 通常是一个异步操作 的结果 从语法上说 promise是一个对象 从它可以获取异步操作的的最终状态 成功或失败 Promise是一个构造函数 对外提
  • 轨迹相似性度量方法总结

    轨迹相似性度量方法总结 基于点的度量 基于形状的度量 基于分段 基于特定任务 基于点的度量 1 欧氏距离 优点 线性计算时间 缺点 轨迹长度要相同 2 DTW 是对时间序列距离测量的改进 优点 考虑到时间差 比欧式距离效果好 缺点 对噪音比
  • C++(17)——智能指针初步及弃用auto_ptr的原因

    RAII 使用局部对象来管理资源的技术 RAII的原理 RAII的四个步骤 裸指针存在的问题 delete后的指针变量就变成了一个失效指针 也叫作悬空指针 对于下面的代码 void Destroy Object op delete op d
  • 无源波分和彩光模块_甘肃移动2020~2022年无源波分设备及光模块集采结果:迅特、绍兴中科中标...

    据CFOL从中国移动招标与采购网上了解 上周五 甘肃移动公开2020 2022年无源波分设备及光模块集采结果 该项目于10月份启动招标 历时1个月 集采产品分为无源波分设备及光模块两类 项目分为标包1及标包2 各标包3家企业中标 2家中标1
  • android监控view高度变化,Android-获取View宽高的时机

    前言 最近遇到一个bug 问题描述是这样的 启动页需要放置一张广告图 要使这张图在不变形的情况下 等比例缩放 宽度要占满屏幕宽 于是手动计算并设置ImageView需要的缩放比例来对图片进行缩放 该方法触发的时机引发了一些问题 privat
  • ReferenceError: XXX is not defined 错误及解决办法

    ReferenceError XXX is not defined 错误及解决办法 我这里报错是忘记了引入此方法所在的js文件 解决办法 引入所需的js文件 此错误 另外一种情况就是 jQuery引入先后顺序不对 要先引入jQuery文件
  • emmc学习

    1 介绍 1 1 简介 emmc embedded multi media card eMMC的一个明显优势是在封装中集成了一个控制器 它提供标准接口并管理闪存 使得手机厂商就能专注于产品开发的其它部分 并缩短向市场推出产品的时间 这些特点
  • pikachu之文件下载和文件上传

    目录 一 文件下载 1 复制这个下载文件地址 2 尝试去下载这个down nba php 3 目录扫描工具 二 文件上传 1 checkclient 1 利用burp suite 2 关闭js 3 修改页面源代码 2 mime类型验证 3
  • IO多路复用机制详解

    高性能IO模型浅析 服务器端编程经常需要构造高性能的IO模型 常见的IO模型有四种 1 同步阻塞IO Blocking IO 即传统的IO模型 2 同步非阻塞IO Non blocking IO 默认创建的socket都是阻塞的 非阻塞IO
  • 机器学习模型融合

    模型融合方式 均值法Averaging 适用于回归类算法 将每个评估器的输出做平均 类似于Bagging中回归的做法 投票法Voting 适用于分类算法 将每个评估器的输出进行投票 类似于Bagging中分类的做法 堆叠法Stacking
  • heapdump文件找相关的键值

    前言 一次做项目遇到heapdump文件 也是第一次碰到所以记录一下过程 步骤 下载heapdump文件是一个 hprof gz后缀的文件 使用MemoryAnalyzer这个工具就可以进行对其中的键值进行分析 工具的安装 下载好Memor
  • C++:主要的关联式容器类型:set

    目录 1 关联式容器 2 键值对 3 树形结构的关联式容器 4 set 5 set的特点 6 set的使用 常用接口的使用 1 insert 2 find 3 erase 4 operator 7 multiset 1 关联式容器 与vec
  • 解决pyqt中mainwindow界面最大化按钮是灰色(不能最大化)的问题

    解决方法 将maximumSize的值设置为16777215x16777215即可使窗口打开时最大化按钮可用 MAIN SIZE MAX QSize 16777215 16777215 self setMaximumSize MAIN SI
  • 系统服务器迁移,应用系统和服务器迁移云

    应用系统和服务器迁移云 内容精选 换一换 公有云通常指第三方供应商为用户提供的能够通过Internet使用的云端基础设施和服务 其核心属性是共享资源服务 华为云是公有云品牌 在SAP系统迁移的过程中 您可以单独使用这些华为云云服务 也可以组
  • Python方便又强大的日志记录器——loguru

    Python方便又强大的日志记录器 loguru Loguru是一个旨在使Python日志记录变得愉快的库 该库通过添加一系列有用的功能来解决标准记录器的警告 从而减少Python日志记录的痛苦 日志记录对每个应用程序都是基本的 它简化了调