Python 还不会用日志模块?本文给你答案
前言
在我们的 python 项目中,log 日志是一个必不可缺的模块。我们需要将一些重要的运行数据保存下来,方便后期的问题排查。通常来说我们会将 log 保存至文件中,再进行后续的归档和查阅。python 保存 log 用到最多的工具就是 logging 模块了,这里介绍下 logging 的使用吧。
logging 安装及简单使用
直接输入 pip install logging
安装。来个最简单的使用例子:
配置项
配置 logging 的方式主要有 3 种:
使用 ini 文件配置
使用字典或 JSON 文件配置
直接通过源码配置
通常来说,因为源码配置的方式方便封装和自定义,因此我们多采用第 3 种方式来配置。
日志级别
日志的输出默认有以下几个级别:
关键概念
主要的处理器有:
Logger 记录器:暴露了应用程序代码直接使用的接口
Handler 处理器:将日志落地到哪里的设置
Filter 过滤器:提供更细的粒度控制输出哪些日志
Formatter 格式化器:日志输出格式的设置
Handler 处理器
常用的 Handler 处理器有 StreamHandler、FileHandler、NullHandler。项目中多使用 FileHandler,示例:
在实际开发中,有些日志生成速度很快,如果日志都写到一个文件中,后续日志查询效率会大大降低。因此我们需要对日志文件进行切割。
logging 模块支持按照时间切割、按照文件切割。
按照时间切割 TimedRotatingFileHandler 示例
按照文件切割 RotatingFileHandler 示例
Formatter 格式化器
使用 Formatter 可设置日志的输出格式,用法 formatter = logging.Formatter(fmt=None, datefmt=None)
format 格式释义:
%(levelno)s: 打印日志级别的数值
%(levelname)s: 打印日志级别名称
%(pathname)s: 打印当前执行程序的路径
%(filename)s: 打印当前执行程序名称
%(funcName)s: 打印日志的当前函数
%(lineno)d: 打印日志的当前行号
%(asctime)s: 打印日志的时间
%(thread)d: 打印线程 id
%(threadName)s: 打印线程名称
%(process)d: 打印进程 ID
%(message)s: 打印日志信息
示例:
打印一个看看:
配置示例
小结
logging 包是 python 使用最多的日志模块,我们在使用时,根据自身需要来自定义配置。我们在一些日志查询高频的情景下,可结合其他工具比如 elasticsearch、kibana 等来快速查询。
版权声明: 本文为 InfoQ 作者【芥末拌个饭吧】的原创文章。
原文链接:【http://xie.infoq.cn/article/532fa8e472aee88117ab7ee3b】。文章转载请联系作者。
评论