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 的首位或末位参数使用一个字符串来表示. 该字符串的特征如下:
- 位于第一个或最后一个参数位置
- 以冒号开头
- 冒号后跟多个字母, 每个字母各代表一个功能. 例如 ‘: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')
所有可用的标记如下列表:
标记 | 全称 | 说明 |
---|---|---|
:d | divider line | 分割线 |
:i | index | 序号 |
:l | long / loose format | “宽松结构” (多行展开) |
:p | parent layer | 显示父级调用者的源码位置 |
:r | rich format | 富文本格式 |
:s | short / single line format | 简略格式1 |
:t | timestamp | 时间戳2 |
:v | verbosity / log level | 打印级别 |
标记数值说明:
标记 | 缺省值3 | 说明 | 备注 |
---|---|---|---|
:d0 | 是 | 使用默认的分割线风格 | |
:d1+ | 使用用户定义的分割线风格 | 暂不支持 | |
- | |||
:i0 | 重置计数 | ||
:i1 | 是 | 递增计数 (1, 2, 3, …) | |
:i2 | 递增计数 (01, 02, 03, …) | 暂不支持 | |
:i3 | 递增计数 (001, 002, 003, …) | 暂不支持 | |
- | |||
:l0 | 是 | 让 lk-logger 决定如何展开为多行 | |
:l1 | 强制展开全部节点 | 暂不支持 | |
- | |||
:p0 | 是 | 显示自身 (指 print 代码) 所在的源码位置 | |
:p1 | 显示父级调用者所在的源码位置 | ||
:p2 | 显示父级的父级调用者所在的源码位置 | ||
:p3 | 显示父级的父级的父级调用者所在的源码位置 | ||
:p4+ | 同上, 以此类推 | 请谨慎使用 :p2+ , 如果该调用者不存在则会报错 | |
- | |||
:v0 | TRACE 级别的打印 (默认色) | 不同的级别会使用不同的高亮颜色 | |
:v1 | 是 | DEBUG 级别的打印 (灰色) | |
:v2 | INFO 级别的打印 (蓝色) | ||
:v3 | WARN 级别的打印 (黄色) | ||
:v4 | ERROR 级别的打印 (红色) | ||
:v5 | FATAL 级别的打印 (红底白字) | ||
:v6+ | 用户自定义级别 | 暂不支持 |