Python 小技巧 050:日志记录
Python 的日志记录Python 的内置模块 logging 定义了实现灵活的事件日志系统的函数与类。通过日志记录,当程序报错时我们可以找到起因。
今天我们就来学学如何在 Python 中实现日志记录。
首先,我们需要先导入日志记录模块 logging:
import logging
之后使用 basicConfig() 方法配置记录器,再使用 getLogger() 获取记录器:
# 创建并配置记录器
# filename 参数用于指定日志文件名,一般以 .log 后缀结尾
logging.basicConfig(filename="log.log")
logger = logging.getLogger()
我们还需指定日志记录器的等级。一般有 6 种等级,分别为 CRITICAL、ERROR、WARNING、INFO、DEBUG、NOTSET,对应数值分别是 50、40、30、20、10、0。我们一般将记录器的等级指定为 DEBUG,即 10。
有两种方法重设记录器的等级,可以调用记录器的 setLevel() 方法,也可以直接在 basicConfig() 中指定 level 参数:
# 第一种方法
logging.basicConfig(filename="log.log")
logger = logging.getLogger()
logger.setLevel(10)
# 第二种方法
logging.basicConfig(filename="log.log", level=10)
logger = logging.getLogger()
配置好记录器之后,我们可以使用记录器的 debug()、info()、warning()、error()、critical() 向日志写入信息:
logger.debug("调试!")
logger.info("这是一条信息")
logger.warning("警告!")
logger.error("错误!")
logger.critical("发生严重错误!")
执行整段代码,会自动在当前目录下创建 log.log 并写入信息,其内容如下:
DEBUG:root:调试!
INFO:root:这是一条信息。
WARNING:root:警告!
ERROR:root:错误!
CRITICAL:root:发生严重错误!
格式虽然不错,但是缺少一些重要的信息,如写入信息时的时间等。我们可以自定义信息写入的格式。
看下表:
格式描述
%(asctime)s写入信息的时间,格式为 年-月-日 时:分:秒,毫秒。
%(created)f写入信息的时间戳(time.time())。
%(filename)s程序文件名。
%(levelname)s记录信息的类型(CRITICAL、ERROR、WARNING、INFO、DEBUG)。
%(levelno)s记录信息的类型,用数字表示(50、40、30、20、10)。
%(lineno)s日志记录调用的行号。
%(message)s记录的消息。
%(module)s程序的模块名(不包括后缀)。
%(msecs)d写入信息时的时间的毫秒部分。
%(pathname)s程序的完整路径名。
例如:
import logging
# 指定 format 参数
logging.basicConfig(filename="log.log", level=10, format="%(asctime)s —— %(message)s")
logger = logging.getLogger()
logger.debug("调试!")
logger.info("这是一条信息。")
logger.warning("警告!")
logger.error("错误!")
logger.critical("发生严重错误!")
运行后 log.log 文件内容如下:
DEBUG:root:调试!
INFO:root:这是一条信息。
WARNING:root:警告!
ERROR:root:错误!
CRITICAL:root:发生严重错误!
2020-01-15 10:09:58,749 —— 调试!
2020-01-15 10:09:58,750 —— 这是一条信息。
2020-01-15 10:09:58,750 —— 警告!
2020-01-15 10:09:58,750 —— 错误!
2020-01-15 10:09:58,750 —— 发生严重错误!
时间是有了,可以前面我们记录的信息还保留着,因为记录器默认是以追加模式打开日志文件的。我们可以修改 filemode 参数使其每次都覆盖写入:
import logging
logging.basicConfig(filename="log.log", level=10, format="%(asctime)s —— %(message)s", filemode="w")
logger = logging.getLogger()
logger.debug("调试!")
logger.info("这是一条信息。")
logger.warning("警告!")
logger.error("错误!")
logger.critical("发生严重错误!")
执行后 log.log 文件内容如下:
2020-01-15 10:12:37,290 —— 调试!
2020-01-15 10:12:37,290 —— 这是一条信息。
2020-01-15 10:12:37,290 —— 警告!
2020-01-15 10:12:37,290 —— 错误!
2020-01-15 10:12:37,291 —— 发生严重错误! 没人...... 没人吗?
页:
[1]