鱼C论坛

 找回密码
 立即注册
查看: 2000|回复: 2

[技术交流] Python 小技巧 050:日志记录

[复制链接]
发表于 2020-1-15 10:13:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-12 18:52:42 | 显示全部楼层
没人......
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-12 20:17:50 From FishC Mobile | 显示全部楼层
没人吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-25 14:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表