自己弄了一个python学习群,感兴趣的可以加
一般来说,一个程序运行过程中,我们无法在外界知道程序运行到哪一部分。甚至来说除了错误我们去定位错误都很难,所以我们引进了日志
所谓日志就是在程序运行时输出某些变量的值,你可以使用记日志的方式来调试代码
你可能会大量的使用print(),但是这是不对的
Python 的 logging 模块使得你很容易创建自定义的消息记录。
这些日志消息将描述程序执行何时到达日志函数调用,并列出你指定的任何变量当时的值。
另一方面,缺失日志信息表明有一部分代码被跳过,从未执行
假如你编写了一个函数,计算一个数的阶乘。在数学上,4 的阶乘是1 × 2 × 3 × 4,即 24。7 的阶乘是 1 × 2 × 3 × 4 × 5 × 6 × 7,即 5040
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')
这里,我们在想打印日志信息时,使用 logging.debug() 函数。这个 debug() 函数
将调用 basicConfig(),打印一行信息。这行信息的格式是我们在 basicConfig()函数
中指定的,并且包括我们传递给 debug() 的消息
程序会如何输出呢?
最终是0
我们看日志文件:
- DEBUG - Start of factorial(5)
- DEBUG - i is 0, total is 0
- DEBUG - i is 1, total is 0
- DEBUG - i is 2, total is 0
- DEBUG - i is 3, total is 0
- DEBUG - i is 4, total is 0
- DEBUG - i is 5, total is 0
- DEBUG - End of factorial(5)
0
- DEBUG - End of program
这样我们会很清楚的看到错误在哪里, i的起始值是0,导致所有的数据全部是0
我们对程序进行更改
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(1, 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')
输出
- DEBUG - Start of factorial(5)
- DEBUG - i is 1, total is 1
- DEBUG - i is 2, total is 2
- DEBUG - i is 3, total is 6
- DEBUG - i is 4, total is 24
- DEBUG - i is 5, total is 120
- DEBUG - End of factorial(5)
120
- DEBUG - End of program
日志级别
“日志级别”提供了一种方式,按重要性对日志消息进行分类。
5 个日志级别如下所示,从最不重要到最重要。利用不同的日志函数,消息可以按某个级别记入日志。
级别 | 日志函数 | 描述 |
---|---|---|
DEBUG | logging.debug() | 最低级别。通常只有在调试程序时,你才会关心这些消息 |
INFO | logging.info() | 用于记录程序中一般事件的信息,或确认一切工作正常 |
WARNING | logging.warning() | 用于表示可能的问题 |
ERROR | logging.error() | 用于记录错误,它导致程序做某事失败 |
CRITICAL | logging.critical() | 最高级别。用于表示致命的错误 |
日志消息作为一个字符串,传递给这些函数。日志级别是一种建议。归根到底,还是由你来决定日志消息属于哪一种类型。
将日志记录到文件
import logging
logging.basicConfig(filename='myProgramLog.txt', level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')
关注公众号:Python互助小组
一起学习,共同进步
里面有不定期的赠书活动哦