我们经常使用print()函数打印一些信息到控制台,方便的查看结果和一些调试信息。print()确实是方便和易用,但是也有一些缺点,比如打印出来的信息不能保存,再次运行程序时,之前打印出来的结果就被清空了。 Python中内置一个日志模块——logging,通过它我们就可以很方便的在Python代码中记录简单的程序日志。
logging模块将日志分为了五个等级(从低到高):
# 测试logging的等级
import logging
logging.info("打印信息")
logging.warning("警告信息")
logging.error("出现了错误")
# 控制台输出:
WARNING:root:警告信息
ERROR:root:出现了错误
# 我们使用logging模块的basicConfig()方法,修改一个日志输出等级为INFO
import logging
logging.basicConfig(level=logging.INFO)
logging.error("出现了错误")
logging.info("打印信息")
logging.warning("警告信息")
# 控制台输出:
INFO:root:打印信息
WARNING:root:警告信息
ERROR:root:出现了错误
# 记录的日志信息除了打印到控制台之外,我们还能够将其写入文件中。同样是使用basicConfig()方法进行设置
import logging
logging.basicConfig(level=logging.INFO,filename='test.log')
logging.error("出现了错误")
logging.info("打印信息")
logging.warning("警告信息")
# 执行后会将以上信息写到“test.log”文件下,重复执行会将信息追加在原来的文件后
# 如果希望每次log都覆盖原来的log,就在basicConfig()方法中使用filemode参数进行设置
import logging
logging.basicConfig(level=logging.INFO,filename='test.log',filemode='w')
logging.error("出现了错误")
logging.info("打印信息")
logging.warning("警告信息")
# 执行后本次程序输出的log将会将原来的log内容覆盖
# 如果我们想改变日志消息的格式呢,使用basicConfig()方法,利用其format参数进行设置
import logging
logging.basicConfig(level=logging.INFO,filename='test.log',format="%(levelname)s:%(message)s")
logging.error("出现了错误")
logging.info("打印信息")
logging.warning("警告信息")
# 这次long输出的信息就不包含'root'
# logging支持的格式还不止这两种,我们来看看:
%(asctime)s:日志创建时的普通时间;
%(created)f:日志创建时的时间(由time.time()返回);
%(filename)s:文件名;
%(funcName)s:调用日志记录的函数;
%(levelname)s:日志消息的文本级别;
%(levelno)s:日志消息的数字级别;
%(lineno)d:调用日志消息的行号;
%(msecs)d:创建时间的毫秒部分;
%(message)s:日志消息;
%(name)s:日志器的名称;
%(pathname)s:记录日志的源文件的路径名;
%(process)d:进程ID;
%(processName)s:进程名;
%(thread)d:线程ID;
%(threadName)s:线程名;
%(relativeCreated)d:创建日志记录的时间(以毫秒为单位)
# 借助于这些格式,我们可以自定义日志记录,比如显示时间:
import logging
logging.basicConfig(level=logging.INFO,filename='test.log',format="%(levelname)s:%(asctime)s:%(message)s")
logging.error("出现了错误")
logging.info("打印信息")
logging.warning("警告信息")
https://zhuanlan.zhihu.com/p/31893724 https://zhuanlan.zhihu.com/p/32043593