首页 > 编程语言 >Python 日志记录-loguru

Python 日志记录-loguru

时间:2022-12-07 15:22:11浏览次数:61  
标签:__ name loguru Python message 2022 日志 logger 07

Python 日志记录-loguru

使用logging模块时

用python写代码时,logging模块最基本的几行配置,如下:

import logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)

logger.info('this is another debug message')
logger.warning('this is another debug message')
logger.error('this is another debug message')
logger.info('this is another debug message')

执行结果如下:
img

引言 loguru

如果想更简洁,可用loguru库

loguru默认的输出格式是上面的内容,有时间、级别、模块名、行号以及日志信息,不需要手动创建 logger,直接使用即可,另外其输出还是彩色的,看起来会更加友好。

官方文档

安装

pip install loguru
1

日志级别

Level name Severity value Logger method
TRACE 5 logger.trace
DEBUG 10 logger.debug
INFO 20 logger.info
SUCCESS 25 logger.success
WARNING 30 logger.warning
ERROR 40 logger.error
CRITICAL 50 logger.critical

简单测试下

from loguru import logger

logger.debug("debug")
logger.info("info")
logger.success("success")
logger.warning("warning")
logger.error("error")
logger.critical("critical")
12345678

输出结果

img

特性

简介

此函数应用于注册接收器,这些接收器负责管理使用记录字典上下文化的日志消息。接收器可以采用多种形式:简单函数、字符串路径、类似文件的对象、协程函数或内置处理程序。

请注意:可以使用remove()函数来删除以前添加的处理程序。

例子:

import sys
from loguru import logger


logger.add("test.log", format="{time} {level} {message}", filter="", level="INFO", encoding="utf-8")
logger.debug("debug")
logger.info("info")
logger.success("success")
logger.warning("warning")
logger.error("error")
logger.critical("critical")
1234567891011

效果,输出日志到test.log文件

2022-07-27T17:14:36.393072+0800 INFO info
2022-07-27T17:14:36.394068+0800 SUCCESS success
2022-07-27T17:14:36.395066+0800 WARNING warning
2022-07-27T17:14:36.396063+0800 ERROR error
2022-07-27T17:14:36.397060+0800 CRITICAL critical
12345

rotation/retension/compression

官方介绍:loguru.logger — loguru documentation

rotation:指示何时应关闭当前记录的文件并创建新文件,可以是文件大小/每天的时间点/时间间隔等。

logger.add("test1.log", rotation="500 MB") # 日志文件超过500M创建新的文件
logger.add("test2.log", rotation="12:00")  # 每天中午12点创建新的日志文件
logger.add("test3.log", rotation="1 week") # 当前使用的日志文件超过1周,创建新的日志文件
123

retension:指示合适应该删除旧文件。

logger.add("test4.log", retention="10 days") # 超过十天的日志文件删除
1

compression:日志文件在关闭时应转换为的压缩或归档格式。

logger.add("test5.log", compression="zip") # 日志文件关闭后,使用zip进行压缩
1

异常捕获

使用catch()装饰器或者上下文管理器可以捕获异常,确保任何错误都能够记录到log日志中。

装饰器

from loguru import logger

@logger.catch
def test(x, y, z):
    return 1 / (x + y + z)
test(0, 1, -1)
1234567

上下文装饰器

from loguru import logger


def test(x, y, z):
    return 1 / (x + y + z)
with logger.catch():
    test(0, 1, -1) 
12345678

输出结果
img

完全描述性异常

记录代码中发生的异常对于跟踪BUG非常重要,loguru允许显示整个堆栈跟踪(包括变量值)来帮助定位BUG原因。

logger.add("out.log", backtrace=True, diagnose=True)  # Caution, may leak sensitive data in prod

def func(a, b):
    return a / b
def nested(c):
    try:
        func(5, c)
    except ZeroDivisionError:
        logger.exception("What?!")
nested(0)
123456789101112

输出结果
img

自定义颜色

logger.add(sys.stdout, colorize=True, format="<red>{time}</red> <level>{message}</level>")
logger.debug("debug")
logger.info("info")
logger.success("success")
logger.warning("warning")
logger.error("error")
logger.critical("critical")
1234567

输出结果
img

异步/线程安全/多进程安全

默认情况下,添加到log的所有接收器都是线程安全的,但他们不是多进程安全的。如果需要实现多进程安全,异步记录日志,需要添加一个enqueue参数:

logger.add("test.log", enqueue = True)
1

结构化日志记录

将消息转化为json字符串以便于传递或者解析,可以使用serialize来配置:

logger.add("test.log", serialize=True, encoding="utf-8")
logger.debug("debug")
logger.info("info")
logger.success("success")
logger.warning("warning")
logger.error("error")
logger.critical("critical")
1234567

输出结果

{"text": "2022-07-28 11:25:44.434 | DEBUG    | __main__:<module>:43 - debug\n", "record": {"elapsed": {"repr": "0:00:00.127658", "seconds": 0.127658}, "exception": null, "extra": {}, "file": {"name": "logutil.py", "path": "e:\\GitPorject\\ZanguS1\\ZanguRecorder\\common\\logutil.py"}, "function": "<module>", "level": {"icon": "

标签:__,name,loguru,Python,message,2022,日志,logger,07
From: https://www.cnblogs.com/hanfe1/p/16963151.html

相关文章

  • java 引入logging日志
    1、yml添加 #日志配置logging:level:#自己的包名com.wrblog:debugorg.springframework:warn 2、在resources下创建logback.xml文件并更改自己的......
  • 日志架构选型
    ......
  • python字符串常用方法汇总
    常用方法如下:str="mynameis{name}andmyageis{age}"#统计字符串的长度print(len(str))#格式化输出也可当切片用的方式print(str.format(name="ming",ag......
  • 使用python opencv延时摄影
    以下内容和源码使用openai的chatGPT生成。下面是一个示例代码,它使用OpenCV库在Python中实现这个功能。请注意,这个程序需要您先安装OpenCV库。我们设置了摄像头编......
  • CSV__04--python使用迭代器读取csv文件出现读取结果为空的解决办法
    1迭代器的概念迭代器(iterator)有时又称光标(cursor)是程序设计的软件设计模式,可在容器对象(container,例如链表或数组)上遍访的接口。2迭代器的特点强制性:必须将元素从迭代......
  • Python爬虫实战,requests模块,Python爬取网易云歌曲并保存本地
    前言今天给大家简单演示的爬取了一下某易云歌曲的排行榜信息,最后将音乐保存到本地开发工具Python版本:3.6.4相关模块:requests模块re模块os模块环境搭建安装Pyth......
  • Opencv——python画点、画框
    画点:​​cv2.circle(img,center,radius,color[,thickness[,lineType[,shift]]])​​画框:​​cv2.rectangle(image,start_point,end_point,color,thickness)​​......
  • Python——实现网页模拟键盘输入和鼠标点击
    Python——实现网页模拟键盘输入和鼠标点击​​一.安装selenium库​​​​1.1win+R打开输入窗口​​​​1.2输入cmd,点击确定​​​​1.3输入代码:​​​​二.以谷歌浏览器......
  • python 读取excel 02
    读取文件夹内的所有表,输入想要查询的表名,列出对应表页签,查询对应内容并打印出来importxlrd print('输入‘x’返回上一步!!!') whileTrue:  print('\n输入想要查询的......
  • 我用iPad编了个Python贪吃蛇,附源码!
    贪吃蛇可以算是街机游戏中经典中的经典了,实际上即使是手敲代码也不会太难写。最近折腾了一番iPad上新上架的LightlyIDE,可以在iPad上编程开发,也支持GUI可视化界面,遂尝试使用......