引言
一直都是使用print打印输出信息来调试python代码,有个缺点就是代码完成之后需要将以前的print都删除或者注释掉,
这样既不美观,也不方便.本文主要介绍了如何使用python自带的logging库创建log实例来代替print函数进行debug,
以及创建代码片段供vim方便调用.
设置logging
首先需要在你的python代码里导入这个库
导入这个库之后,首先需要新建一个log实例
1
|
logger = logging.getLogger('log')
|
创建了实例之后可以设置log的级别(后面也可以更改级别),可以设置的级别如下:
级别 |
如何使用 |
DEBUG |
详细信息,典型地调试问题时会感兴趣. |
INFO |
证明事情按预期工作. |
WARNING |
表明发生了一些意外,或者不久的将来会发生问题(如‘磁盘满了’).软件还是在正常工作. |
ERROR |
由于更严重的问题,软件已不能执行一些功能了. |
CRITICAL |
严重错误,表明软件已不能继续运行了. |
因为我们要调试,这里暂且就设置为DEBUG级别.
1
|
logger.setLevel(logging.DEBUG)
|
设置完log级别之后,我们创建一个handler(处理器).
1
|
handler = logging.StreamHandler()
|
处理器还可以设置格式化器用于日志输出格式.
1
2
3
4
5
|
# 创建log格式化器,这里有设置了两种,后一种最简单只有输出信息
# formatter = logging.Formatter('[%(asctime)s] %(name)s:%(levelname)s:\n%(message)s')
formatter = logging.Formatter('%(message)s')
# 设置格式化器
handler.setFormatter(formatter)
|
最后为logger添加handler.
1
|
logger.addHandler(handler)
|
完整代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
# 创建logger实例
logger = logging.getLogger('log')
# 设置log级别
logger.setLevel(logging.DEBUG)
# 创建handler(处理器)
handler = logging.StreamHandler()
# 创建log格式化器,这里有设置了两种,后一种最简单只有输出信息
# formatter = logging.Formatter('[%(asctime)s] %(name)s:%(levelname)s:\n%(message)s')
formatter = logging.Formatter('%(message)s')
# 设置格式化器
handler.setFormatter(formatter)
# 为Logger实例增加一个处理器
logger.addHandler(handler)
|
使用logging
例子:
1
2
3
4
5
6
|
a = 30
b = 10
c = a - b
logger.debug(c)
logger.warning(c)
logger.info(c)
|
如果不想显示debug的信息,只要改变之前设置的日志级别为更低的级别即可.
为vim添加代码片段,更加便捷的使用logging
在此之前需要安装UltiSnips与vim-snippets插件,然后找到UltiSnips文件夹中的python.snippets,再其中加入:
1
2
3
4
5
6
7
8
9
|
snippet log "using logging to replace print" b
logger = logging.getLogger('log')
logger.setLevel(logging.${1:DEBUG})
handler = logging.StreamHandler()
formatter = logging.Formatter('[%(asctime)s] %(name)s:%(levelname)s:\n%(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)
$0
endsnippet
|
这样在用vim编辑python文件的时候输入log然后启动代码片段触发快捷键(我这里为就可以直接插入上面的代码.
参考
python logging模块使用教程
替换你的print(logging模块超简明指南)