使用Python中的logging模块打印日志信息

2019-08-17  本文已影响0人  几时见得清梦

转载自:知乎:使用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模块介绍

基本介绍

  1. logging 模块是python自带的一个包,因此在使用的时候,不必安装,只需要import即可。
  2. logging模块有5个level,分别是:debug,主要是查看一下程序运行的信息,一般是调试程序要看的信息;info,是我们看程序是否如预料执行的信息;warn,意料之外的,但是不影响程序运行;error和critical就是一些比较严重的问题,会影响程序运行。
    默认level是warn,这个时候debug级别和info级别就不会被输出到日志里了。如果想要看到这些信息,就需要进行一些设置。

基础设置

主要调用logging.basicConfig(***kwargs*)这个函数对logging进行设置。函数常用的参数如下:

  1. level:主要调整logging的级别
  2. filename:输出日志的路径
  3. filemode:直接写入还是追加写入
  4. 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模块来打印信息,输出日志。

上一篇下一篇

猜你喜欢

热点阅读