日志模块python loguru

这篇具有很好参考价值的文章主要介绍了日志模块python loguru。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

日志模块python loguru

下载

pip install loguru

开箱即用

Loguru 的主要概念是只有一个:logger

from loguru import logger

logger.info("This is log info!")
logger.warning("This is log warn!")
logger.error("This is log error!")
logger.debug("This is log debug!")

可以看到不需要手动设置,Loguru 会提前配置一些基础信息,自动输出时间、日志级别、模块名、行号等信息,而且根据等级的不同,还自动设置了不同的颜色,方便观察,真正做到了开箱即用!

如果想自定义日志级别,自定义日志格式,保存日志到文件该怎么办?

与 logging 模块不同,不需要 Handler,不需要 Formatter,只需要一个 add() 函数就可以了,

from loguru import logger

logger.add('test.log')
logger.debug('this is a debug')

我们不需要像 logging 模块一样再声明一个 FileHandler 了,就一行 add() 语句搞定,运行之后会发现目录下 test.log 里面同样出现了刚刚控制台输出的 debug 信息。

与 add() 语句相反,remove() 语句可以删除我们添加的配置:

from loguru import logger

log_file = logger.add('test.log')
logger.debug('This is log debug!')
logger.remove(log_file)
logger.debug('This is another log debug!')

完整参数

Loguru 对输出到文件的配置有非常强大的支持,比如支持输出到多个文件,分级别分别输出,过大创建新文件,过久自动删除等等。 下面我们来详细看一下 add() 语句的详细参数:

基本语法:

add(sink, *, level='DEBUG', format='<green>{time:YYYY-MM-DD HH:mm:ss.SSS}</green> | <level>{level: <8}</level> | <cyan>{name}</cyan>:<cyan>{function}</cyan>:<cyan>{line}</cyan> - <level>{message}</level>', filter=None, colorize=None, serialize=False, backtrace=True, diagnose=True, enqueue=False, catch=True, **kwargs)

基本参数

sink:可以是一个 file 对象,例如 sys.stderr 或 open('file.log', 'w'),也可以是 str 字符串或者 pathlib.Path 对象,即文件路径,也可以是一个方法,可以自行定义输出实现,也可以是一个 logging 模块的 Handler,比如 FileHandler、StreamHandler 等,还可以是 coroutine function,即一个返回协程对象的函数等。
level:日志输出和保存级别。
format:日志格式模板。
filter:一个可选的指令,用于决定每个记录的消息是否应该发送到 sink。
colorize:格式化消息中包含的颜色标记是否应转换为用于终端着色的 ansi 代码,或以其他方式剥离。 如果没有,则根据 sink 是否为 tty(电传打字机缩写) 自动做出选择。
serialize:在发送到 sink 之前,是否应首先将记录的消息转换为 JSON 字符串。
backtrace:格式化的异常跟踪是否应该向上扩展,超出捕获点,以显示生成错误的完整堆栈跟踪。
diagnose:异常跟踪是否应显示变量值以简化调试。建议在生产环境中设置 False,避免泄露敏感数据。
enqueue:要记录的消息是否应在到达 sink 之前首先通过多进程安全队列,这在通过多个进程记录到文件时很有用,这样做的好处还在于使日志记录调用是非阻塞的。
catch:是否应自动捕获 sink 处理日志消息时发生的错误,如果为 True,则会在 sys.stderr 上显示异常消息,但该异常不会传播到 sink,从而防止应用程序崩溃。
\kwargs:仅对配置协程或文件接收器有效的附加参数(见下文)。
当且仅当 sink 是协程函数时,以下参数适用:

loop:将在其中调度和执行异步日志记录任务的事件循环。如果为 None,将使用 asyncio.get_event_loop() 返回的循环。
当且仅当 sink 是文件路径时,以下参数适用:

rotation:一种条件,指示何时应关闭当前记录的文件并开始新的文件。

*retention *:过滤旧文件的指令,在循环或程序结束期间会删除旧文件。

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

delay:是在配置 sink 后立即创建文件,还是延迟到第一条记录的消息时再创建。默认为 False。

mode:内置 open() 函数的打开模式,默认为 a(以追加模式打开文件)。
buffering:内置 open() 函数的缓冲策略,默认为1(行缓冲文件)。
encoding:内置 open() 函数的文件编码,如果 None,则默认为 locale.getpreferredencoding()。
\kwargs:其他传递给内置 open() 函数的参数。
这么多参数可以见识到 add() 函数的强大之处,仅仅一个函数就能实

当且仅当 sink 是文件路径时,以下参数适用:

rotation:一种条件,指示何时应关闭当前记录的文件并开始新的文件。
*retention *:过滤旧文件的指令,在循环或程序结束期间会删除旧文件。
compression:日志文件在关闭时应转换为的压缩或存档格式。
delay:是在配置 sink 后立即创建文件,还是延迟到第一条记录的消息时再创建。默认为 False。
mode:内置 open() 函数的打开模式,默认为 a(以追加模式打开文件)。
buffering:内置 open() 函数的缓冲策略,默认为1(行缓冲文件)。
encoding:内置 open() 函数的文件编码,如果 None,则默认为 locale.getpreferredencoding()。

rotation 日志文件分隔

add() 函数的 rotation 参数,可以实现按照固定时间创建新的日志文件,比如设置每天 0 点新创建一个 log 文件:

logger.add('runtime_{time}.log', rotation='00:00')

设置超过 500 MB 新创建一个 log 文件:

logger.add('runtime_{time}.log', rotation="500 MB")

设置每隔一个周新创建一个 log 文件:

logger.add('runtime_{time}.log', rotation='1 week')

retention 日志保留时间

dd() 函数的 retention 参数,可以设置日志的最长保留时间,比如设置日志文件最长保留 15 天:

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

设置日志文件最多保留 10 个:

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

也可以是一个 datetime.timedelta 对象,比如设置日志文件最多保留 5 个小时:

import datetime
from loguru import logger

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

compression 日志压缩格式

add() 函数的 compression 参数,可以配置日志文件的压缩格式,这样可以更加节省存储空间,比如设置使用 zip 文件格式保存:

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

其格式支持:gzbz2xzlzmatartar.gztar.bz2tar.xz

字符串格式化

Loguru 在输出 log 的时候还提供了非常友好的字符串格式化功能,相当于 str.format()

logger.info('If you are using Python {}, prefer {feature} of course!', 3.6, feature='f-strings')

输出:

2021-10-19 14:59:06.412 | INFO     | __main__:<module>:3 - If you are using Python 3.6, prefer 

异常追溯

在 Loguru 里可以直接使用它提供的装饰器就可以直接进行异常捕获,而且得到的日志是无比详细的:

from loguru import logger


@logger.catch
def my_function(x, y, z):
    # An error? It's caught anyway!
    return 1 / (x + y + z)


my_function(0, 0, 0)

日志输出:

Traceback (most recent call last):

> File "D:\python27\djku\sanbanfu\app01\tests.py", line 40, in <module>
    my_function(0, 0, 0)
    └ <function my_function at 0x000001CCC54F89D0>

  File "D:\python27\djku\sanbanfu\app01\tests.py", line 37, in my_function
    return 1 / (x + y + z)
                │   │   └ 0
                │   └ 0
                └ 0

ZeroDivisionError: division by zero

在控制台的输出是这样的:

相关文献文章来源地址https://www.toymoban.com/news/detail-747913.html

https://loguru.readthedocs.io/en/stable/
    

到了这里,关于日志模块python loguru的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python日志:logging模块使用

    # python日志:logging模块使用 logging模块是Python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级、日志保存路径、日志文件回滚等, 记录运行时的过程 ## 日志事件级别 级别排序:CRITICAL  ERROR  WARNING  INFO  DEBUG 默认等级: WARNING   ## Logger ### 创建log

    2023年04月13日
    浏览(42)
  • python-日志模块以及实际使用设计

    python-日志模块以及实际使用设计 1. 基本组成 日志模块四个组成部分: 日志对象:产生日志信息 日志处理器:将日志信息输出到指定地方,例如终端、文件。 格式器:在日志处理器输出之前,对信息进行各方面的美化。 过滤器:在日志处理器输出之前,将信息按照过滤器的

    2024年01月25日
    浏览(42)
  • Python日志模块:实战应用与最佳实践

    本文详细解析了Python的logging模块,从基本介绍到实际应用和最佳实践。我们通过具体的代码示例解释了如何高效地使用这个模块进行日志记录,以及如何避免常见的陷阱,旨在帮助读者更好地掌握这个强大的工具。 在开发过程中,为了记录应用程序的运行情况,通常我们会

    2024年02月17日
    浏览(40)
  • python 常用内置模块之 logging(日志输出)

    Python logging 模块定义了为应用程序和库实现灵活的事件日志记录的函数和类,可以方便第三方模块或者是应用使用。这个模块提供不同的日志级别,并可以采用不同的方式记录日志,比如文件,HTTP GET/POST,SMTP,Socket 等,甚至可以自定义实现具体的日志记录方式。 Logging 优点

    2024年02月05日
    浏览(56)
  • Python3,能让我折服的库不多,Loguru算一个。

    小鱼 :小屌丝, 你在干啥呢? 小屌丝 :我在记录日志啊 。 小鱼 :… 小屌丝 :日志不都是需要记录的嘛。 小鱼 :日志确认需要记录,但是像你这种操作,并不多。 小屌丝 :…那你的意思, 还有更简单的操作方式??? 小鱼 :嗯… 可以这么说。 小屌丝 :那你还不赶紧

    2024年02月05日
    浏览(34)
  • [python]使用标准库logging实现多进程安全的日志模块

    原本应用的日志是全部输出到os的stdout,也就是控制台输出。因其它团队要求也要保留日志文件,便于他们用其他工具统一采集,另一方面还要保留控制台输出,便于出问题的时候自己直接看pod日志。具体需求如下: 日志支持同时控制台输出和文件输出 控制台的输出级别可以

    2024年01月23日
    浏览(37)
  • Loguru基本、进阶使用方法小结。

    loguru是一个开源的Python日志记录器,它提供了简单且易于使用的接口,同时具有高度的可定制性。loguru的特点包括:支持格式化日志、记录到文件或终端、支持自动清理日志、支持旋转日志等。 loguru的基本使用方法非常简单,只需要导入loguru模块,并使用logger函数创建一个日

    2024年02月16日
    浏览(39)
  • Mybatis基础模块-日志管理

    适配器使接口不兼容的对象可以相互合作。 Java的日志框架有很多,Log4j,Log4j2,Apache Commons Log,java.util.logging,slf4j等,接口不尽相同,Mybatis为了统一匹配这些框架,使用到了适配器模式。 Mybatis自定义了日志接口:org.apache.ibatis.logging.Log。 以下为其类图: 上图的实现相当于adapt

    2024年02月16日
    浏览(55)
  • 【八】mybatis 日志模块设计

    简介: 闲来无事阅读一下mybatis的日志模块设计,学习一下优秀开源框架的设计思路,提升自己的编码能力 在Mybatis内部定义了4个级别:Error:错误 、warn:警告、debug:调试、trance,日志优先级如下: errorwarndebugtrance 如下图可以看到mybatis日志模块的源码结构图:  mybatis通过适配

    2024年02月14日
    浏览(47)
  • Rpc异步日志模块

    在一个大型分布式系统中,任何部署的分布式节点都可能发生崩溃,试想如果用普通的办法,即先排查哪个节点down掉了,找到down掉的节点后采取调试工具gdb调试该节点,进而排查宕机的原因。这中排查方法对于人力物力都是无法接受的。 那么由此记录日志就变得至关重要,

    2024年02月14日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包