不想手动再配置logging?那可以试试loguru( 三 )
最后保存的日志都是序列化后的单条记录:
{"text": "2020-10-07 18:23:36.902 | INFO| __main__:
4、异常追溯当异常和错误不可避免时 , 最好的方式就是让我们知道程序到底是哪里出了错 , 或者是因为什么导致错误 , 这样才能更好地让开发人员及时应对并解决 。
loguru 集成了一个名为 better_exceptions 的库 , 不仅能够将异常和错误记录 , 并且还能对异常进行追溯 , 这里是来自一个官网的例子
import osimport sysfrom loguru import loggerlogger.add(os.path.expanduser("~/Desktop/exception_log.log"), backtrace=True, diagnose=True)def func(a, b):return a / bdef nested(c):try:func(5, c)except ZeroDivisionError:logger.exception("What?!")if __name__ == "__main__":nested(0)
最后在日志文件中我们可以得到以下内容:
2020-10-07 21:14:11.830 | ERROR| __main__:nested:16 - What?!Traceback (most recent call last):File "/Users/Bobot/PycharmProjects/docs-python/src/loguru/log_test.py", line 20, in
与 Logging 完全兼容(Entirely Compatible)尽管说 loguru 算是重新「造轮子」 , 但是它也能和 logging 库很好地兼容 。 到现在我们才谈论到 add() 方法的第一个参数 sink 。
这个参数的英文单词动词有「下沉、浸没」等意 , 对于外国人来说在理解上可能没什么难的 , 可对我们国人来说 , 这可之前 logging 库中的 handler 概念还不好理解 。 好在前面我有说过 , loguru 和 logging 库的使用上存在相似之处 , 因此在后续的使用中其实我们就可以将其理解为 handler , 只不过它的范围更广一些 , 可以除了 handler 之外的字符串、可调用方法、协程对象等 。
loguru 官方文档对这一参数的解释是:
An object in charge of receiving formatted logging messages and propagating them to an appropriate endpoint.
翻译过来就是「一个用于接收格式化日志信息并将其传输合适端点的对象」 , 进一步形象理解就像是一个「分流器」 。
import logging.handlersimport osimport sysfrom loguru import loggerLOG_FILE = os.path.expanduser("~/Desktop/testlog.log")file_handler = logging.handlers.RotatingFileHandler(LOG_FILE, encoding="utf-8")logger.add(file_handler)logger.debug("hello, world")
当然目前只是想在之前基于 logging 写好的模块中集成 loguru , 只要重新编写一个继承自 logging.Handler 类并实现了 emit() 方法的 Handler 即可 。
推荐阅读
- 目前配置全性价比高的手机,我只推荐五款,闭着眼买都不会错
- Git服务器配置错误导致日产汽车源码在网上泄露
- 荣耀V40正式得到确认!参数配置也基本确定!售价或将是惊喜
- 三星竟为Galaxy S21系列提供900多种颜色配置
- 红米k40pro和荣耀30区别哪个好 不同点对比参数配置谁好
- 2021年换手机哪个配置最重要,CPU只能排第三位
- 玩转光追大作最低需要什么配置?快来看小狮子的推荐
- 小米11和红米k30pro哪个好性价比高 参数配置对比区别
- 华为nova8与小米10对比哪个好 参数配置区别性能评测
- 三星Galaxy M02s将于1月7日发布!硬件配置很平常