Python logging模块基础配置与高级用法详解

听雨眠
听雨眠
发布时间:2026-10-14| 5人浏览过
原创

本文详细介绍Python内置logging模块的使用方法。涵盖默认行为解析,通过basicConfig函数灵活配置日志级别、格式及输出位置。深入讲解RotatingFileHandler和TimedRotatingFileHandler实现日志切割,以及利用Logger、Handler、Formatter组合进行精细化日志控制,帮助开发者构建规范的日志系统。

Python logging模块默认行为解析

在默认情况下,Python的logging模块会将日志信息输出至标准输出流,且仅展示WARNING级别及以上的日志记录。这一行为表明,系统默认的日志阈值被设定为WARNING(日志级别从高到低依次为CRITICAL、ERROR、WARNING、INFO、DEBUG)。同时,默认的日志输出格式遵循“日志级别:Logger名称:用户输出消息”的结构。

灵活配置日志级别、格式与输出位置

为了实现更高效的日志管理,开发者需要掌握如何灵活配置日志级别、定义日志输出格式以及指定日志存储位置。

基础日志文件配置示例


import logging

file_handler = logging.FileHandler(filename='x1.log', mode='a', encoding='utf-8',)
logging.basicConfig(
  format='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s',
  datefmt='%Y-%m-%d %H:%M:%S %p',
  handlers=[file_handler,],
  level=logging.ERROR
)

logging.error('你好')

日志切割策略与实现

随着应用运行时间的增长,日志文件体积会不断膨胀。因此,实施日志切割策略至关重要,它允许按时间或文件大小自动轮转日志文件,确保存储资源的有效利用。

日志切割高级配置示例


import time
import logging
from logging import handlers

sh = logging.StreamHandler()
rh = handlers.RotatingFileHandler('myapp.log', maxBytes=1024,backupCount=5)
fh = handlers.TimedRotatingFileHandler(filename='x2.log', when='s', interval=5, encoding='utf-8')
logging.basicConfig(
  format='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s',
  datefmt='%Y-%m-%d %H:%M:%S %p',
  handlers=[fh,sh,rh],
  level=logging.ERROR
)

for i in range(1,100000):
  time.sleep(1)
  logging.error('KeyboardInterrupt error %s'%str(i))

logging模块提供了丰富的配置参数,允许开发者根据具体需求调整日志行为。

通过调用logging.basicConfig()函数,可以修改logging模块的默认行为。该函数支持以下关键参数:

filename:指定生成日志文件的文件名,系统将创建FileHandler并将日志写入该文件。filemode:定义文件打开模式,仅在指定filename时生效,默认为追加模式“a”,也可设置为覆盖写入“w”。format:指定日志记录的格式字符串。datefmt:定义日期时间的显示格式。level:设置rootlogger的最低日志级别。stream:指定输出流,如sys.stderr、sys.stdout或已打开的文件对象,默认为sys.stderr。注意,若同时提供filename和stream参数,stream将被忽略。

在format字符串中,可使用以下预定义变量来定制日志内容: %(name)s:Logger的名称。 %(levelno)s:以数字形式表示的日志级别。 %(levelname)s:以文本形式表示的日志级别(如DEBUG, INFO等)。 %(pathname)s:调用日志输出函数的模块的完整路径名,若不可用则缺失。 %(filename)s:调用日志输出函数的模块文件名。 %(module)s:调用日志输出函数的模块名。 %(funcName)s:调用日志输出函数的函数名。 %(lineno)d:调用日志输出语句所在的代码行号。 %(created)f:当前时间,以UNIX标准时间戳(浮点数)表示。 %(relativeCreated)d:从Logger创建到输出日志时的毫秒数。 %(asctime)s:字符串形式的当前时间,默认格式为“2003-07-08 16:49:45,896”,逗号后为毫秒部分。 %(thread)d:线程ID,若不可用则缺失。 %(threadName)s:线程名,若不可用则缺失。 %(process)d:进程ID,若不可用则缺失。 %(message)s:用户输出的具体日志消息。

属性 格式 描述
asctime %(asctime)s 日志产生的时间,默认格式为2003-07-08 16:49:45,896
created %(created)f time.time()生成的日志创建时间戳
filename %(filename)s 生成日志的程序名
funcName %(funcName)s 调用日志的函数名
levelname %(levelname)s 日志级别 ('DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL')
levelno %(levelno)s 日志级别对应的数值
lineno %(lineno)d 日志所针对的代码行号(如果可用的话)
module %(module)s 生成日志的模块名
msecs %(msecs)d 日志生成时间的毫秒部分
message %(message)s 具体的日志信息
name %(name)s 日志调用者
pathname %(pathname)s 生成日志的文件的完整路径
process %(process)d 生成日志的进程ID(如果可用)
processName %(processName)s 进程名(如果可用)
thread %(thread)d 生成日志的线程ID(如果可用)
threadName %(threadName)s 线程名(如果可用)

Logger对象的高级配置与组件协作

除了基础配置,深入理解并配置Logger对象是实现复杂日志需求的关键。

针对不同数据流或模块,可以设置差异化的日志级别,以实现更精细的控制。

Logger与多Handler配置示例


import logging

logger = logging.getLogger()
# 创建一个handler,用于写入日志文件
fh = logging.FileHandler('test.log',encoding='utf-8')
fh.setLevel(logging.DEBUG)

# 再创建一个handler,用于输出到控制台 
ch = logging.StreamHandler()
ch.setLevel(logging.INFO)

formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

fh.setFormatter(formatter) 
ch.setFormatter(formatter) 

#logger对象可以添加多个fh和ch对象 
logger.addHandler(fh) 
logger.addHandler(ch) 

logger.debug('logger debug message') 
logger.info('logger info message') 
logger.warning('logger warning message') 
logger.error('logger error message') 
logger.critical('logger critical message')

logging库主要由四个组件构成:Logger、Handler、Filter和Formatter。Logger对象为应用程序提供直接使用的接口;Handler负责将日志发送到指定的目的地(如文件、控制台或网络);Filter提供过滤日志信息的机制;Formatter则指定日志的显示格式。此外,可以通过logger.setLevel(logging.DEBUG)统一设置Logger级别,或通过fh.setLevel(logging.DEBUG)单独为某个文件处理器设置特定级别,从而实现更灵活的日志控制。

以上内容涵盖了Python logging模块的核心使用技巧。如需了解更多关于Python logging模块的进阶资料,建议关注本站发布的其他相关文章。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。