日志logging调试代码
目录:
日志消息是给程序员的,不是给用户的。用户不会因为你便于调试,而想看到 的字典值的内容。请将日志信息用于类似这样的目的。对于用户希望看到的消息, 例如“文件未找到”或者“无效的输入,请输入一个数字”,应该使用print() 调用。 我们不希望禁用日志消息之后,让用户看不到有用的信息。
作为一个非专业的程序员,调试代码一般都用print输出。现在偶然看到logging日志的方式来调试。做一个记录学习一下
用日志调试代码的优势
- print的缺点:如果用print调试代码,到代码调试成功之后还需要去删除或者注释掉print的一些语句,有时候还会误删一些需要用的print语句或者其他重要的语句。
- logging的优点:
- logging在你调试代码之后可以用一行语句将所有的logging去除掉,省去了上述删除和注释的麻烦。
- logging可以将你调试过程中输出的内容保存为一个文件,方便你回去看每次调试的结果。
使用日志模块
简单使用
下面是一个例子,具体的情况是factorial函数是计算阶乘(1*2*3*4*5*…*(n-1)*n)的函数,我们想看函数每次乘的数是什么,以及总和是多少。 可以使用logging模块。
import logging
logging.basicConfig(level=logging.DEBUG,
format=' %(asctime)s - %(levelname)s- %(message)s')
logging.debug('Start of program')
def factorial(n):
logging.debug('Start of factorial(%s%%)' % (n))
total = 1
for i in range(n + 1):
total *= i
logging.debug('i is ' + str(i) + ', total is ' + str(total))
logging.debug('End of factorial(%s%%)' % (n))
return total
print(factorial(5))
logging.debug('End of program')
输出结果如下所示:
2021-08-29 15:37:43,560 - DEBUG- Start of program
2021-08-29 15:37:43,560 - DEBUG- Start of factorial(5%)
2021-08-29 15:37:43,560 - DEBUG- i is 0, total is 0
2021-08-29 15:37:43,560 - DEBUG- i is 1, total is 0
2021-08-29 15:37:43,560 - DEBUG- i is 2, total is 0
2021-08-29 15:37:43,561 - DEBUG- i is 3, total is 0
2021-08-29 15:37:43,561 - DEBUG- i is 4, total is 0
2021-08-29 15:37:43,561 - DEBUG- i is 5, total is 0
2021-08-29 15:37:43,561 - DEBUG- End of factorial(5%)
2021-08-29 15:37:43,561 - DEBUG- End of program
0
标明了日期的行是日志的记录。最后的”0“是输出的内容。
保存在文件中
如果我们想要保存在一个文件里面,可以在logging.basicConfig()里面添加filename
import logging
logging.basicConfig(filename= 'logging file of this program.txt',
level=logging.DEBUG,
format=' %(asctime)s - %(levelname)s- %(message)s')
加上后不会显示logging的内容,可以打开txt文件看每次调试后得到的logging内容。
Logging Disable
只需要在前面加一句话就可以将所有的内容取消掉。
import logging
logging.basicConfig(filename= 'logging file of this program.txt',
level=logging.DEBUG,
format=' %(asctime)s - %(levelname)s- %(message)s')
logging.disable()
# 后续的logging.debug()都会失效,记住要加在basicConfig之后,其他debug之前。
Other functions of logging
如果想不只是输出debug的内容,想记录一些其他的内容(比如error,warning),则需要根据不同重要程度来按重要性对日志消息进行分类。 python一般有5 个日志级别,如下表所示:
级别 | 日志函数 | 描述 |
---|---|---|
DEBUG | logging.debug() | 最低级别。用于小细节。通常只有在诊断问题时,你才会关心这些消息 |
INFO | logging.info() | 用于记录程序中一般事件的信息,或确认一切工作正常 |
WARNING | logging.warning() | 用于表示可能的问题,它不会阻止程序的工作,但将来可能会 |
ERROR | logging.error() | 用于记录错误,它导致程序做某事失败 |
CRITICAL | logging.critical() | 最高级别。用于表示致命的错误,它导致或将要导致程序完全停止 |
日志消息作为一个字符串,传递给这些函数。日志级别是一种建议。归根到底,还是由你来决定日志消息属于哪一种类型。
文档信息
- 本文作者:Kilin
- 本文链接:https://star-twinking.github.io/2021/08/29/%E7%94%A8%E6%97%A5%E5%BF%97%E8%B0%83%E8%AF%95python/
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)