GitHub:你的日志记录方式何必是 logging!

2020-07-15 22:08:45 +08:00
 zhijieju

hello,小伙伴们,大家好,今天给大家介绍的开源项目是:loguru,这个开源项目是一个Python简易日志库,这个开源项目的宗旨是通过添加一系列有用的功能来解决标准记录器的注意事项,从而减少 Python日志记录的痛苦。

我们使用 logging 的配置方法基本上是这样的:

import logging

logging.basicConfig(
    filename='test.log',
    level=logging.DEBUG,
    format='[line:%(lineno)d] - %(funcName)s: %(asctime)s - %(levelname)s - %(message)s',
    datefmt='%Y-%m-%d %H:%M:%S',
)

使用官方自带的logging模块,每次创建项目都要自己去配置一下才可以,经常码代码使用起来有点吗发,但是使用这个loguru模块,只需要两行代码即可完成以上配置,简单易用。

安装


pip install loguru

使用方法


最简单的使用方法,只需要倒入模块,然后 debug 输出,看控制台效果即可。

from loguru import logger

logger.debug("That's it, beautiful and simple logging!")

打印在控制台中是彩色的!

如果你的终端兼容,loguru 会自动为日志添加颜色。你可以通过使用接收器格式的标记标签来定义自己喜欢的样式。

logger.add(sys.stdout, colorize=True, format="<green>{time}</green> <level>{message}</level>")

输出到文件中

只需要添加一行代码即可

from loguru import logger

# 添加到名为 demo.log 文件中
logger.add("demo.log")
logger.debug("That's it, beautiful and simple logging!")

输出到文件中

以时间为文件名分割日志,可以这样做:

from loguru import logger

# 以时间分割日志
logger.add('file_{time}.log')

logger.debug("That's it, beautiful and simple logging!")

效果展示(看文件名称)

文件控制的高级用法


logger.add("rotation.log", rotation="500 MB")

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

我们也可以使用rotation参数实现定时创建 log 文件,例如:

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

这样就是实现每天 12 点新创建一个 log 文件输出了。

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

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

这样我们就可以实现两周创建一个 log 文件了。

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

比如我们想要设置日志文件最长保留 7 天,可以这么来配置:

logger.add('runtime.log', retention='7 days')

这样 log 文件里面就会保留最新 7 天的 log,老师再也不用担心 log 沉积的问题。

loguru 还可以配置文件的压缩格式,比如使用 zip 文件格式保存,如下:

logger.add('runtime.log', compression='zip')

这样可以更加节省存储空间。

字符串输出

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

这样在添加参数就非常方便了。

Traceback 记录

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

但用了 loguru 之后,我们用它提供的装饰器就可以直接进行 Traceback 的记录,类似这样的配置即可:

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

我们做个测试,我们在调用时三个参数都传入 0,直接引发除以 0 的错误,看看会出现什么情况:

my_function(0, 0, 0)

运行完毕之后,可以发现 log 里面就出现了 Traceback 信息,而且给我们输出了当时的变量值,真的是不能再赞了!结果如下:

> File "run.py", line 15, in <module>
    my_function(0, 0, 0)
    └ <function my_function at 0x1171dd510>

  File "/private/var/py/logurutest/demo5.py", line 13, in my_function
    return 1 / (x + y + z)
                │   │   └ 0
                │   └ 0
                └ 0

ZeroDivisionError: division by zero

根据需要进行结构化日志记录


希望对日志进行序列化以便于解析或传递日志?使用该serialize参数,每条日志消息在发送到已配置的接收器之前将转换为 JSON 字符串。

logger.add('file_{time}.log', serialize=True)
# {"text": "2020-07-15 21:47:33.793 | DEBUG    | __main__:<module>:14 - That's it, beautiful and simple logging!\n", "record": {"elapsed": {"repr": "0:00:00.017317", "seconds": 0.017317}, "exception": null, "extra": {}, "file": {"name": "loguru_demo.py", "path": "/Users/notes/modules/loguru_demo.py"}, "function": "<module>", "level": {"icon": "\ud83d\udc1e", "name": "DEBUG", "no": 10}, "line": 14, "message": "That's it, beautiful and simple logging!", "module": "loguru_demo", "name": "__main__", "process": {"id": 7280, "name": "MainProcess"}, "thread": {"id": 4458839488, "name": "MainThread"}, "time": {"repr": "2020-07-15 21:47:33.793271+08:00", "timestamp": 1594820853.793271}}}

邮件通知


Loguru 可以轻松地与功能强大的notifiers库结合使用(必须单独安装),以在程序意外失败时接收电子邮件或发送其他多种通知。

import notifiers

params = {
    "username": "you@gmail.com",
    "password": "abc123",
    "to": "dest@gmail.com"
}

# Send a single notification
notifier = notifiers.get_notifier("gmail")
notifier.notify(message="The application is running!", **params)

# Be alerted on each error message
from notifiers.logging import NotificationHandler

handler = NotificationHandler("gmail", defaults=params)
logger.add(handler, level="ERROR")

或者配合ES使用

####~~比内置日志记录快 10 倍~~ 尽管在大多数情况下,日志记录对性能的影响可以忽略不计,但零成本的日志记录器将允许在任何地方使用它而无需过多担心。在即将发布的版本中,Loguru 的关键功能将以 C 语言实现,以实现最大速度。

以上就是loguru的基本用法了,感兴趣的小伙伴可以研究一下这个的用法,特别简单易用,赶快去配置到你的项目中吧!

开源地址: https://github.com/Delgan/loguru

今天的推荐不知道大家喜欢吗?如果你们喜欢话,请在文章底部留言或点赞,以表示对我的支持,你们的留言,点赞,转发关注是我持续更新的动力哦!

关注公众号回复:"1024",免费领取一大波学习资源,先到先得哦!

1613 次点击
所在节点    Python
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/690392

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX