Python 一个好用的 python 日志库 dictlog

codeskyblue · 2026年05月06日 · 146 次阅读

背景

为什么已经有了 logging 标准库,甚至在 loguru,structlog 都存在的情况下,还要做这个一个日志库呢。

当然是都用的不太爽了。

  • logging 标准库的默认日志输出太难看了。默认不带颜色,不带行号,什么都要自己配置。我就想要一个开箱即用的。
  • loguru 虽然输出格式好看,但是自成一体,不跟系统的 logging 兼容。
  • structlog 使用上完全满足我的需求,但是输出的 debug、info 的日志颜色一模一样让我怎么区分啊。另外 get_logger() 返回的是个 Any 类型,我的编辑器不认啊。

所以将这些日志库的优点整理出来。汇集到一起,就出现了现在的 dictlog 库。

https://github.com/uiautodev/dictlog

安装

pip install dictlog

使用

import dictlog

# 基本用法
log = dictlog.get_logger("myapp")
# 调整日志级别,与 logging.DEBUG 等价,默认是 WARNING
log.level = dictlog.DEBUG

# 支持的日志级别:TRACE(5) < DEBUG(10) < INFO(20) < WARNING(30) < ERROR(40) < CRITICAL(50)
log.trace("detailed debug info", user_id=123)  # 最详细的调试信息
log.debug("debug message", port=8080)
log.info("server started", port=8080)

# 绑定上下文,后续调用自动携带
log = log.bind(user="alice")
log.info("user logged in")          # 自带 user=alice
log = log.unbind("user")
log.info("context removed")         # 不再包含 user

# 捕获异常并附加堆栈,与 logging 用法一致
try:
    1 / 0
except ZeroDivisionError:
    log.error("something went wrong", exc_info=True)
    # 或使用 exception(),默认 exc_info=True
    log.exception("something went wrong")

下面是输出,颜色可谓是赏心悦目。

主要的代码也不长,完全就是对标准日志库 logging 的二次封装。但是使用起来方便的太多。

结尾

欢迎大家评论,Star

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册