不想手动再配置logging?那可以试试loguru( 四 )


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 的通用配置不一定满足每个人的需要 , 对于那些动手能力强或水平较高的朋友还能进一步根据个人需求或业务需求进行二次封装 , 或许也能较为贴合实际情况 。
【不想手动再配置logging?那可以试试loguru】作者:100gle , 练习时长不到两年的非正经文科生一枚 , 喜欢敲代码、写写文章、捣鼓捣鼓各种新事物;现从事有关大数据分析与挖掘的相关工作 。


推荐阅读