zltzlt 发表于 2020-1-15 10:13:57

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 —— 发生严重错误!

lijiachen 发表于 2020-7-12 18:52:42

没人......

_2_ 发表于 2020-7-12 20:17:50

没人吗?
页: [1]
查看完整版本: Python 小技巧 050:日志记录