不想手动再配置logging?那可以试试loguru( 三 )
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 即可 。
import logging.handlersimport osimport sysfrom loguru import loggerclass InterceptHandler(logging.Handler):def emit(self, record):try:level = logger.level(record.levelname).nameexcept ValueError:level = record.levelnoframe, depth = logging.currentframe(), 2while frame.f_code.co_filename == logging.__file__:frame = frame.f_backdepth += 1logger.opt(depth=depth, exception=record.exc_info).log(level, record.getMessage())logging.basicConfig(handlers=[InterceptHandler()], level=0)def func(a, b):return a / bdef nested(c):try:func(5, c)except ZeroDivisionError:logging.exception("What?!")if __name__ == "__main__":nested(0)
最后结果同之前的异常追溯一致 。 而我们只需要在配置后直接调用 logging 的相关方法即可 , 减少了迁移和重写的成本 。
最后本文介绍了关于 loguru 的常用方法 , 从对比例子上来看 , 相比于复杂的 logging 配置来说 , 使用 loguru 库无疑还是很香的 , 毕竟别人已经为我们一些日常的通用性需求提供了封装好的解决方案 , 无论是在学习还是在使用的成本上 , 无疑还是比较小的 。
由于篇幅有限 , loguru 的其他配置部分没有进一步展开 , 如果看完本文的你对这个库感兴趣并打算投入到实际的开发和生产中使用 , 那么建议你还是阅读一下其官方文档 , 有必要的话可以浏览一下源码 。
不过 loguru 的通用配置不一定满足每个人的需要 , 对于那些动手能力强或水平较高的朋友还能进一步根据个人需求或业务需求进行二次封装 , 或许也能较为贴合实际情况 。
作者:100gle , 练习时长不到两年的非正经文科生一枚 , 喜欢敲代码、写写文章、捣鼓捣鼓各种新事物;现从事有关大数据分析与挖掘的相关工作 。
- 智能手机市场|华为再拿第一!27%的份额领跑全行业,苹果8%排在第四名!
- 体验|闭上眼睛点外卖是什么感觉?时隔一年再次体验,进步令人欣慰
- 逛逛|淘宝内容化再升级:“买家秀”变身“逛逛”试图冲破算法局限
- 再次|华为Mate40Pro干瞪眼?P50再次曝光,这次是真香!
- 打响|拼多多打响双12首枪,iPhone12降到“mini价”,苹果11再见
- 再见|2020年:三星S20再见了!2021年:三星S21我来了!
- 任正非|任正非:“谁再建言造车,直接调离岗位!”华为为何这么做?
- 屏幕|不想换iPhone 12手机就等一等吧!iPhone 13开始露出峥嵘
- 对焦速度|Mate40Pro之后,华为还有“硬菜”,或将再次领先行业?
- 关闭|虾米音乐的关闭,再次应证了互联网下竞争的规则,小而精很难生存