马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
Python 的日志记录
Python 的内置模块 logging 定义了实现灵活的事件日志系统的函数与类。通过日志记录,当程序报错时我们可以找到起因。
今天我们就来学学如何在 Python 中实现日志记录。
首先,我们需要先导入日志记录模块 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 —— 发生严重错误!
|