文章目录 [隐藏]
在使用Python编写程序的过程中,我们经常使用print()函数打印一些信息到控制台,方便的查看结果和一些调试信息,以判断程序的运行是否正常。
print()确实是方便和易用,但是也有一些缺点,比如打印出来的信息不能保存,再次运行程序时,之前打印出来的结果就被清空了。
而对于一些后台运行的程序,或者出现的异常,比如Web应用,直接将信息使用print()打印出来,显然不利于程序出现故障之后的排错和调试。
这个时候,一个程序日志记录器就显得很有必要了。
日志器用于跟踪记录程序运行时发生的一些事件,一般而言,一条日志记录由事件的描述性信息、可选的可变数据组成。
Python中内置一个日志模块——logging,通过它我们就可以很方便的在Python代码中记录简单的程序日志。
logging模块将日志分为了五个等级:
上述的五个等级的日志信息分别使用:logging模块的debug()、info()、warning()、error()、critical()方法来实现。
默认情况下,logging使用的日志级别是warning,这表示只有在这个级别及其以上级别的日志信息才会被记录,所以默认情况下debug信息和info信息都不会被显示出来。
我们来测试一下:
import logging logging.error("出现了错误") logging.info("打印信息") logging.warning("警告信息")
运行代码,控制台会显示:
ERROR:root:出现了错误 WARNING:root:警告信息
INFO级别的信息,果然没有显示出来。
我们使用logging模块的basicConfig()方法,修改一个日志输出等级为INFO :
import logging logging.basicConfig(level=logging.INFO) logging.error("出现了错误") logging.info("打印信息") logging.warning("警告信息")
这样,控制台中就能够输出INFO级别的信息了:
ERROR:root:出现了错误 INFO:root:打印信息 WARNING:root:警告信息
记录的日志信息除了打印到控制台之外,我们还能够将其写入文件中。同样是使用basicConfig()方法进行设置:
import logging logging.basicConfig(level=logging.INFO,filename='test.log') logging.error("出现了错误") logging.info("打印信息") logging.warning("警告信息")
运行程序,会生成一个名为test.log的文本文件,里面是日志记录的内容:
如果我们重复运行上面的代码,会发现,日志信息会追加在test.log文件的内容后面:
如果不想这样怎么办,同样在basicConfig()方法中使用filemode参数进行设置:
import logging logging.basicConfig(level=logging.INFO,filename='test.log',filemode='w') logging.error("出现了错误") logging.info("打印信息") logging.warning("警告信息")
这样,生成的日志文件就是一个新的:
在上面输出的日志信息我们可以发现,所有的消息都是”日志级别:角色:消息”这样的格式输出的。
如果我们想改变日志消息的格式呢?同样使用basicConfig()方法,利用其format参数进行设置。先来看一个例子:
import logging logging.basicConfig(level=logging.INFO,filename='test.log',format="%(levelname)s:%(message)s") logging.error("出现了错误") logging.info("打印信息") logging.warning("警告信息")
我们设置格式为消息等级和消息内容。输出的日志内容中,已经没有了root这个信息了:
logging支持的格式还不止这两种,我们来看看:
借助于这些格式,我们可以自定义日志记录,比如显示时间:
import logging logging.basicConfig(level=logging.INFO,filename='test.log',format="%(levelname)s:%(asctime)s:%(message)s") logging.error("出现了错误") logging.info("打印信息") logging.warning("警告信息")
这样,日志中除了记录消息等级、消息信息外,还会记录上消息创建的时间:
对于logging模块,还有更加深入的用法,我们下一篇继续。
文章版权所有:州的先生博客,转载必须保留出处及原文链接
原文地址:https://zmister.com/archives/213.html
# coding:utf-8 import logging if __name__ == '__main__': logging.basicConfig(level=logging.INFO,filename='test.log',format="%(asctime)s:%(levelname)s:%(message)s",filemode='w') logging.error("出现了错误") logging.info("打印信息") logging.warning("警告信息")View Code