项目地址: https://github.com/likianta/lk-logger
lk-logger 是一个简单易用的日志打印工具, 可作为 print 的替代品.
lk-logger 的用法非常简单, 在顶部加入两行代码:
import lk_logger
lk_logger.setup()
之后, 你的原项目中所有使用到 print(...)
的地方, 打印效果都会发生变化…
lk-logger 相比于 print 的优点:
- 显示调用者在源码的文件位置和行号.
在 pycharm 控制台中, 点击可跳转到源代码位置: - 显示被打印对象的变量名. 例如,
print(name)
会在控制台同时显示变量名 “name” 和它的值:name = xxx...
- 写法更加简单:
普通的打印:
a, b = 1, 2
print('a = {}, b = {}, a + b = {}'.format(a, b, a + b))
lk-logger 打印:
a, b = 1, 2
print(a, b, a + b)
- 代码高亮
安装
通过 pip 安装:
pip install lk-logger
最新版本为 5.0.0 及以上.
请注意: lk-logger 需要 python 3.8 及以上解释器.
基本用法
得益于 lk-logger 非侵入式的设计, 只需要极小的修改就能产生立竿见影的效果.
在您的项目的入口脚本中, 加入下面两行代码:
import lk_logger
lk_logger.setup()
不需要其他的修改, 按照平时使用 print 的习惯去使用即可!
以上就是 lk-logger 几乎全部的用法.
作为补充, 下面列出的是 print 以外的功能:
启用 “打印变量名” 的功能
import lk_logger
lk_logger.setup(show_varnames=True)
效果前后对比 (注意红线框出的位置):
请注意: 启用该功能将对性能产生一些影响.
开启, 关闭, 恢复标准 print 方法
import lk_logger
lk_logger.setup() # 开启 lk-logger
print('hello world') # -> xxx.py:4 >> module >> hello world
...
lk_logger.unload() # 卸载 lk-logger 的特色功能, 将恢复为 python 标准打印
print('hello world') # -> hello world
...
lk_logger.disable() # 关闭打印
print('hello world') # (在控制台没有打印输出)
...
lk_logger.enable() # 恢复打印
print('hello world') # -> xxx.py:19 >> module >> hello world
...
setup quiet 参数
在默认情况下, lk_logger.setup()
在被调用时会自动产生一条 “欢迎” 信息:
如果您正在开发基础支持类库, 并不希望其他调用者看到这条消息 (考虑到这会给其他人带来疑惑和困扰). 可以添加一个 quiet 参数:
lk_logger.setup(quiet=True)
在一些第三方库中 (例如 lk-utils, pyportable-installer 等), 你会在它们的 __init__.py
文件中看到这种用法.
此外, lk_logger.setup()
允许被多次调用, 但最多只会产生一次欢迎信息.
进阶用法
一般来说, 上述用法已经足以应对绝大多数情景.
当我们需要进一步控制打印的风格时, lk-logger 提供了 “标记语法” 来实现.
提示: 标记语法同样采用了非侵入式的设计原则, 使用标记语法并不会破坏 print 的使用习惯.
标记语法通过在 print 的首位或末位参数使用一个字符串来表示. 该字符串的特征如下:
- 位于第一个或最后一个参数位置
- 以冒号开头
- 冒号后跟多个字母, 每个字母各代表一个功能. 例如 ‘:i’, ‘:r’, ‘:vpd’, …
- 每个字母后面, 可以跟一个可选的数字. 例如 ‘:i0’, ‘:p2v4’, …
示例:
print(':i', 'monday')
print(':i', 'tuesday')
print(':i', 'wednesday')
示例 2:
print('this is a divider', ':d')
print('this is a TRACE message', ':v0')
print('this is a DEBUG message', ':v1')
print('this is a INFO message', ':v2')
print('this is a WARN message', ':v3')
print('this is a ERROR message', ':v4')
print('this is a FATAL message', ':v5')
所有可用的标记如下列表:
标记 | 全称 | 说明 |
| divider line | 分割线 |
| index | 序号 |
| long / loose format | “宽松结构” (多行展开) |
| parent layer | 显示父级调用者的源码位置 |
| rich format | 富文本格式 |
| short / single line format | 简略格式1 |
| timestamp | 时间戳2 |
| verbosity / log level | 打印级别 |
标记数值说明:
标记 | 缺省值3 | 说明 | 备注 |
| 是 | 使用默认的分割线风格 | |
| 使用用户定义的分割线风格 | 暂不支持 | |
- | |||
| 重置计数 | ||
| 是 | 递增计数 (1, 2, 3, …) | |
| 递增计数 (01, 02, 03, …) | 暂不支持 | |
| 递增计数 (001, 002, 003, …) | 暂不支持 | |
- | |||
| 是 | 让 lk-logger 决定如何展开为多行 | |
| 强制展开全部节点 | 暂不支持 | |
- | |||
| 是 | 显示自身 (指 print 代码) 所在的源码位置 | |
| 显示父级调用者所在的源码位置 | ||
| 显示父级的父级调用者所在的源码位置 | ||
| 显示父级的父级的父级调用者所在的源码位置 | ||
| 同上, 以此类推 | 请谨慎使用 | |
- | |||
| TRACE 级别的打印 (默认色) | 不同的级别会使用不同的高亮颜色 | |
| 是 | DEBUG 级别的打印 (灰色) | |
| INFO 级别的打印 (蓝色) | ||
| WARN 级别的打印 (黄色) | ||
| ERROR 级别的打印 (红色) | ||
| FATAL 级别的打印 (红底白字) | ||
| 用户自定义级别 | 暂不支持 |
- 当前版本暂未实现! ↩︎
- 当前版本暂未实现! ↩︎
- 缺省值表示数字被省略时所表示的默认值. ↩︎