Python标准库logging模块使用详解:从基础到日志轮转
本文详解Python标准库logging模块的使用方法,涵盖日志级别设置、控制台与文件输出配置,以及基于文件大小和时间的日志回滚策略。通过具体代码示例,展示如何创建Logger、Handler及Formatter,实现灵活的日志管理。
logging模块简介
logging是Python标准库中用于记录日志的核心模块。它支持存储多种格式的日志信息,主要功能包括输出运行日志、自定义日志等级、指定日志保存路径以及配置日志文件回滚策略,是开发中监控应用状态的重要工具。
基础用法示例
首先,创建一个名为logger.py的文件,用于配置日志记录器。其核心代码如下:
import logging
# 1.创建一个logger实例,并且logger实例的名称命名为“single info”,设定的严重级别为DEBUG
LOGGER = logging.getLogger('single info')
LOGGER.setLevel(logging.DEBUG)
# 2.创建一个handler,这个主要用于控制台输出日志,并且设定严重级别
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
# 3.创建handler的输出格式(formatter)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
# 4.将formatter添加到handler中
ch.setFormatter(formatter)
# 5.将handler添加到logger中
LOGGER.addHandler(ch)接着,在与logger.py同级目录下创建demo.py文件,并在其中引用已配置好的logger实例。具体调用代码如下:
from logger import LOGGER
LOGGER.debug("打印DEBUG级别的日志")
LOGGER.info("打印INFO级别的日志")运行demo.py文件后,控制台将输出如下日志内容:
2022-09-03 17:38:16,554 - single info - DEBUG - 打印DEBUG级别的日志 2022-09-03 17:38:16,555 - single info - INFO - 打印INFO级别的日志
日志级别说明
默认情况下,logging模块的日志记录等级为WARNING,且日志会直接打印到控制台。各日志级别的大小关系如下:CRITICAL > ERROR > WARNING > INFO > DEBUG > NOTSET。
import logging
LOGGER = logging.getLogger('single info')
LOGGER.error("打印ERROR级别日志")
LOGGER.warning("打印WARNING级别日志")
LOGGER.info("打印INFO级别日志")若执行上述未设置特定等级的代码,输出内容如下:
打印ERROR级别日志 打印WARNING级别日志
由于INFO级别的数值小于WARNING,因此INFO级别的日志不会被输出显示。
日志格式参数详解
%(asctime)s:表示日志创建时的可读时间,默认格式类似' 2022-09-03 17:28:38,073 ',逗号后的数字代表毫秒部分。
%(name)s:表示当前Logger实例的名称。
%(levelname)s:表示当前日志的等级(如DEBUG、INFO等)。
%(message)s:表示日志记录的具体内容。
将日志输出到指定文件
修改logger.py文件,配置将日志写入指定文件,代码如下:
import logging
# 1、创建一个logger实例,并且logger实例的名称命名为“single info”,设定的严重级别为DEBUG
LOGGER = logging.getLogger('single info')
LOGGER.setLevel(logging.DEBUG)
# 2、创建一个handler,用于写入日志文件
fh = logging.FileHandler('test.log',encoding="utf-8", mode="a")
fh.setLevel(logging.WARNING)
#3、定义handler的输出格式(formatter)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(filename)s - %(lineno)d : %(message)s')
# 4、给handler添加formatter
fh.setFormatter(formatter)
# 5、给logger添加handler
LOGGER.addHandler(fh)
demo.py文件中的调用代码保持不变,主要区别在于日志输出目标。
from logger import LOGGER
LOGGER.debug("打印DEBUG级别的日志")
LOGGER.error("打印ERROR级别的日志")执行demo.py文件后,项目根目录下会生成一个名为test.log的文件。
打印ERROR级别日志 打印WARNING级别日志
特别提示:若需在日志文件中输出中文内容,必须在指定日志文件时明确设置编码格式(如utf-8)。
日志回滚:基于文件大小
仅修改logger.py文件,定义一个RotatingFileHandler,设置最多备份3个日志文件,且每个日志文件最大大小为1K。
import logging
from logging.handlers import RotatingFileHandler
# 1、创建一个logger实例,并且logger实例的名称命名为“single info”,设定的严重级别为DEBUG
LOGGER = logging.getLogger('single info')
LOGGER.setLevel(logging.DEBUG)
# 2、定义一个RotatingFileHandler,最多备份3个日志文件,每个日志文件最大1K
rHandler = RotatingFileHandler("log.txt",maxBytes = 1,backupCount = 3,encoding="utf-8", mode="a")
rHandler.setLevel(logging.WARNING)
#3、定义handler的输出格式(formatter)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(filename)s - %(lineno)d : %(message)s')
# 4、给handler添加formatter
rHandler.setFormatter(formatter)
# 5、给logger添加handler
LOGGER.addHandler(rHandler)
多次运行demo.py后,项目根目录下会新增四个文件。

其中log.txt为当前正在写入的日志文件,而log.txt.1、log.txt.2和log.txt.3为历史备份文件。
日志回滚:基于时间间隔
仅修改logger.py文件,定义一个TimedRotatingFileHandler,设置最多备份3个日志文件,每隔5秒生成一个新的日志文件间隔点。
import logging
from logging.handlers import TimedRotatingFileHandler
from statistics import mode
# 1、创建一个logger实例,并且logger实例的名称命名为“single info”,设定的严重级别为DEBUG
LOGGER = logging.getLogger('single info')
LOGGER.setLevel(logging.DEBUG)
# 2、定义一个TimedRotatingFileHandler,最多备份3个日志文件,每隔5秒作为一个日志文件的间隔点
rHandler =TimedRotatingFileHandler(filename="ds_update", when="S", interval=5, backupCount=3,encoding="UTF-8")
rHandler.setLevel(logging.WARNING)
# 3、定义handler的输出格式(formatter)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(filename)s - %(lineno)d : %(message)s')
# 4、给handler添加formatter
rHandler.setFormatter(formatter)
# 5、给logger添加handler
LOGGER.addHandler(rHandler)
多次运行demo.py后,项目根目录下会新增四个文件。

ds_update为当前日志存储文件,ds_update.2022-09-03_19-24-50、ds_update.2022-09-03_19-24-45和ds_update.2022-09-03_19-24-36为备份文件,备份文件按时间顺序由近及远滚动。
至此,关于Python标准库logging模块的使用介绍完毕。如需了解更多Python标准库logging相关内容,可搜索本站历史文章或继续浏览后续教程。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













