项目地址: https://github.com/likianta/lk-logger

lk-logger 是一个简单易用的日志打印工具, 可作为 print 的替代品.

lk-logger 的用法非常简单, 在顶部加入两行代码:

import lk_logger
lk_logger.setup()

之后, 你的原项目中所有使用到 print(...) 的地方, 打印效果都会发生变化…

python控制打印机打印 python控制打印机的库_python控制打印机打印


lk-logger 相比于 print 的优点:

  1. 显示调用者在源码的文件位置和行号.
    在 pycharm 控制台中, 点击可跳转到源代码位置:
  2. 显示被打印对象的变量名. 例如, print(name) 会在控制台同时显示变量名 “name” 和它的值: name = xxx...
  3. 写法更加简单:
    普通的打印:
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)

python控制打印机打印 python控制打印机的库_lk-logger_02

  1. 代码高亮

安装

通过 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)

效果前后对比 (注意红线框出的位置):

python控制打印机打印 python控制打印机的库_python_03

python控制打印机打印 python控制打印机的库_python_04

请注意: 启用该功能将对性能产生一些影响.

开启, 关闭, 恢复标准 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() 在被调用时会自动产生一条 “欢迎” 信息:

python控制打印机打印 python控制打印机的库_python_05

如果您正在开发基础支持类库, 并不希望其他调用者看到这条消息 (考虑到这会给其他人带来疑惑和困扰). 可以添加一个 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')

python控制打印机打印 python控制打印机的库_lk-logger_06

示例 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')

python控制打印机打印 python控制打印机的库_lk-logger_07

所有可用的标记如下列表:

标记

全称

说明

: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+

用户自定义级别

暂不支持


  1. 当前版本暂未实现! ↩︎
  2. 当前版本暂未实现! ↩︎
  3. 缺省值表示数字被省略时所表示的默认值. ↩︎