转载自:知乎:使用Python中logging模块,抛弃print吧
logging模块作用及示例
在实际应用中,日志文件十分重要,通过日志文件,我们知道程序运行的细节;同时,当程序出问题时,我们也可以通过日志快速定位问题所在。我们也需要输出一些中间信息,如运行时间、变量值等,以便于定位问题和调试。
在以往我们习惯于用print()函数输出信息,如:
print('Start reading database')
records = model.read_recrods()
print('records', records)
print('Updating record ...')
model.update_records(records)
print('done')
使用print()的缺点很明显,当正式运行程序时,需要将这些print()语句注释或删除,效率很低。
为解决这个问题,可以使用logging
模块:
import logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
logger.info('Start reading database')
# read database here
records = {'john': 55, 'tom': 66}
logger.debug('Records: %s', records)
logger.info('Updating records ...')
# update records here
logger.info('Finish updating records')
运行结果如下:
INFO:__main__:Start reading database
INFO:__main__:Updating records ...
INFO:__main__:Finish updating records
logging
模块和print()的区别在于:logging
模块可以通过改变level
来控制一些语句是否输出。在上边代码中level
被设置为INFO
级别,下边改为DEBUG
级别:
logging.basicConfig(level=logging.DEBUG)
得到的输出为:
INFO:__main__:Start reading database
DEBUG:__main__:Records: {'john': 55, 'tom': 66}
INFO:__main__:Updating records ...
INFO:__main__:Finish updating records
logging模块介绍
基本介绍
- logging 模块是python自带的一个包,因此在使用的时候,不必安装,只需要import即可。
- logging模块有5个level,分别是:debug,主要是查看一下程序运行的信息,一般是调试程序要看的信息;info,是我们看程序是否如预料执行的信息;warn,意料之外的,但是不影响程序运行;error和critical就是一些比较严重的问题,会影响程序运行。
默认level是warn,这个时候debug级别和info级别就不会被输出到日志里了。如果想要看到这些信息,就需要进行一些设置。
基础设置
主要调用logging.basicConfig(***kwargs*)
这个函数对logging进行设置。函数常用的参数如下:
- level:主要调整logging的级别
- filename:输出日志的路径
- filemode:直接写入还是追加写入
- format:输出的格式
通过调整format
,可以输出我们想要的格式,比如:
import logging
logging.basicConfig(format='%(asctime)s - %(message)s', datefmt='%d-%b-%y %H:%M:%S')
logging.warning('Admin logged out')
输出结果为:
12-Jul-18 20:53:19 - Admin logged out
这就是在format参数中设置了时间的,所以得到了时间。我们可以输出多种想要的信息,主要参考这里。
总结
除非是自己写的小脚本中可以使用print()函数,其他情况下最好还是用logging模块来打印信息,输出日志。
网友评论