鱼C论坛

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

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

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

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

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

x
Python 的日志记录


Python 的内置模块 logging 定义了实现灵活的事件日志系统的函数与类。通过日志记录,当程序报错时我们可以找到起因。

今天我们就来学学如何在 Python 中实现日志记录。

首先,我们需要先导入日志记录模块 logging:

  1. import logging
复制代码


之后使用 basicConfig() 方法配置记录器,再使用 getLogger() 获取记录器:

  1. # 创建并配置记录器
  2. # filename 参数用于指定日志文件名,一般以 .log 后缀结尾
  3. logging.basicConfig(filename="log.log")
  4. logger = logging.getLogger()
复制代码


我们还需指定日志记录器的等级。一般有 6 种等级,分别为 CRITICAL、ERROR、WARNING、INFO、DEBUG、NOTSET,对应数值分别是 50、40、30、20、10、0。我们一般将记录器的等级指定为 DEBUG,即 10。

有两种方法重设记录器的等级,可以调用记录器的 setLevel() 方法,也可以直接在 basicConfig() 中指定 level 参数:

  1. # 第一种方法
  2. logging.basicConfig(filename="log.log")
  3. logger = logging.getLogger()
  4. logger.setLevel(10)
复制代码

  1. # 第二种方法
  2. logging.basicConfig(filename="log.log", level=10)
  3. logger = logging.getLogger()
复制代码


配置好记录器之后,我们可以使用记录器的 debug()、info()、warning()、error()、critical() 向日志写入信息:

  1. logger.debug("调试!")
  2. logger.info("这是一条信息")
  3. logger.warning("警告!")
  4. logger.error("错误!")
  5. logger.critical("发生严重错误!")
复制代码


执行整段代码,会自动在当前目录下创建 log.log 并写入信息,其内容如下:

  1. DEBUG:root:调试!
  2. INFO:root:这是一条信息。
  3. WARNING:root:警告!
  4. ERROR:root:错误!
  5. 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程序的完整路径名。


例如:

  1. import logging

  2. # 指定 format 参数
  3. logging.basicConfig(filename="log.log", level=10, format="%(asctime)s —— %(message)s")
  4. logger = logging.getLogger()

  5. logger.debug("调试!")
  6. logger.info("这是一条信息。")
  7. logger.warning("警告!")
  8. logger.error("错误!")
  9. logger.critical("发生严重错误!")
复制代码


运行后 log.log 文件内容如下:

  1. DEBUG:root:调试!
  2. INFO:root:这是一条信息。
  3. WARNING:root:警告!
  4. ERROR:root:错误!
  5. CRITICAL:root:发生严重错误!
  6. 2020-01-15 10:09:58,749 —— 调试!
  7. 2020-01-15 10:09:58,750 —— 这是一条信息。
  8. 2020-01-15 10:09:58,750 —— 警告!
  9. 2020-01-15 10:09:58,750 —— 错误!
  10. 2020-01-15 10:09:58,750 —— 发生严重错误!
复制代码


时间是有了,可以前面我们记录的信息还保留着,因为记录器默认是以追加模式打开日志文件的。我们可以修改 filemode 参数使其每次都覆盖写入:

  1. import logging

  2. logging.basicConfig(filename="log.log", level=10, format="%(asctime)s —— %(message)s", filemode="w")
  3. logger = logging.getLogger()

  4. logger.debug("调试!")
  5. logger.info("这是一条信息。")
  6. logger.warning("警告!")
  7. logger.error("错误!")
  8. logger.critical("发生严重错误!")
复制代码


执行后 log.log 文件内容如下:

  1. 2020-01-15 10:12:37,290 —— 调试!
  2. 2020-01-15 10:12:37,290 —— 这是一条信息。
  3. 2020-01-15 10:12:37,290 —— 警告!
  4. 2020-01-15 10:12:37,290 —— 错误!
  5. 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-5-5 08:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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