python中logging模块的使用方法

该篇博客详细介绍了Python中的logging模块,包括如何创建日志记录器、设置日志级别、定义日志格式和处理器。特别地,讲解了TimedRotatingFileHandler处理器,用于按天分割日志文件并保留指定数量的备份。示例代码演示了如何将日志输出到控制台和文件,以及如何在其他代码中调用这些设置。

python中logging模块的使用方法

1.创建一个logging_logger.py文件,代码如下:
#!/usr/local/bin/python
# -*- coding: utf-8 -*-

"""
Log Level如下,严重等级为NOTSET, DEBUG, INFO, WARNING, ERROR, CRITICAL, 严重程度依次递增
"""

"""
logging.handlers.TimedRotatingFileHandler方法的参数说明如下:

filename 是输出日志文件名的前缀

when 是一个字符串的定义如下:
“S”: Seconds
“M”: Minutes
“H”: Hours
“D”: Days
“W”: Week day (0=Monday)
“midnight”: Roll over at midnight

interval 是指等待多少个单位when的时间后,Logger会自动重建文件,当然,这个文件的创建
取决于filename+suffix,若这个文件跟之前的文件有重名,则会自动覆盖掉以前的文件,所以
有些情况suffix要定义的不能因为when而重复。

backupCount 是保留日志个数。默认的0是不会自动删除掉日志。若设10,则在文件的创建过程中
库会判断是否有超过这个10,若超过,则会从最先创建的开始删除。
"""

import logging
import logging.handlers

# create formatter 创建一个格式器
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')


# 创建一个处理器ch 将日志输出到控制台
ch = logging.StreamHandler()
# 给处理器写入日志文件的 日志级别
ch.setLevel(logging.ERROR)
# 创建一个处理器ch2 将日志输出到文件,并按天分割日志
ch2 = logging.handlers.TimedRotatingFileHandler('./log/logging.log', when='D', interval=1, backupCount=30)
# 给处理器写入日志文件的 日志级别
ch2.setLevel(logging.DEBUG)


# add formatter to ch 将格式器设置给处理器
ch.setFormatter(formatter)
ch2.setFormatter(formatter)


# create logger 创建日志对象 记录器
logger = logging.getLogger(__name__)
# Set default log level 设置日志对象的输出日志级别.处理器中设置日志级别时以处理器中的设置优先
logger.setLevel(logging.DEBUG)


# add ch to logger 将处理器设置给日志对象 记录器
# The final log level is the higher one between the default and the one in handler
logger.addHandler(ch)
logger.addHandler(ch2)
2.在其他代码中使用logging_logger.py文件,实现日志打印控制台和文件
# 导入 logging_logger.py 模块
from logging_logger import logger
# 使用
logger.debug('This is a debug')
logger.info('This is a info')
logger.warning('This is a warning')
logger.error('This is a error')
logger.critical('This is a critical')
<think>我们被要求使用logging模块,并且参考了站内引用。用户要求了解Python logging模块使用方法。 根据引用[1][2][3][4],我们可以总结如下: Pythonlogging模块是标准库的一部分,用于灵活记录日志。它支持不同级别的日志记录(DEBUG, INFO, WARNING, ERROR, CRITICAL),并可以将日志输出到不同的地方(控制台、文件等)。 基本使用步骤: 1. 导入logging模块。 2. 配置日志记录(可选,如设置日志级别、格式、输出文件等)。 3. 使用不同级别的日志记录方法(debug(), info(), warning(), error(), critical())。 我们将按照以下结构回答: 一、基本使用方法 1.1 简单的控制台日志 1.2 配置日志到文件 二、进阶配置 2.1 自定义日志格式 2.2 设置日志级别 2.3 使用多个处理器(Handler) 三、高级特性 3.1 使用Logger对象(而非根记录器) 3.2 日志过滤器 3.3 日志轮转 注意:引用标识[^1][^2][^3][^4]要自然添加。 同时,生成相关问题。 </think>### Python logging模块使用指南 logging模块Python的标准日志记录工具,提供比`print()`更强大的日志管理功能。以下详解使用方法,结合站内引用资料[^1][^2][^3]: --- #### 一、基础使用方法 1. **基础配置(控制台输出)** 默认输出到控制台,支持5级日志: ```python import logging logging.basicConfig(level=logging.DEBUG) # 设置最低日志级别 logging.debug("调试信息") # 级别10 logging.info("常规信息") # 级别20 logging.warning("警告") # 级别30 logging.error("错误") # 级别40 logging.critical("严重错误") # 级别50 ``` > 仅显示 ≥ `level` 的日志(本例显示所有级别)[^2] 2. **输出到文件** 通过`filename`和`filemode`指定文件: ```python logging.basicConfig( filename='app.log', # 日志文件名 filemode='a', # 追加模式('w'覆盖) level=logging.INFO, # 只记录INFO及以上级别 format='%(asctime)s | %(levelname)s | %(message)s' # 日志格式 ) logging.info("服务启动") # 输出到文件:2023-08-15 09:00:00 | INFO | 服务启动 ``` > 格式参数说明:`%(asctime)s`时间,`%(levelname)s`级别,`%(message)s`内容[^3] --- #### 二、进阶配置 1. **自定义日志格式** 使用`Formatter`精细化控制: ```python import logging logger = logging.getLogger('my_logger') # 创建独立记录器 logger.setLevel(logging.DEBUG) # 设置记录器级别 # 创建文件处理器 file_handler = logging.FileHandler('debug.log', encoding='utf-8') file_handler.setFormatter(logging.Formatter( '%(asctime)s - %(name)s - %(levelname)s - %(message)s' )) # 创建控制台处理器 console_handler = logging.StreamHandler() console_handler.setLevel(logging.WARNING) # 控制台只显示警告及以上 logger.addHandler(file_handler) logger.addHandler(console_handler) logger.debug("详细调试信息") # 仅写入文件 logger.error("API请求失败") # 同时写入文件和控制台 ``` 2. **日志级别过滤** 不同模块设置不同级别: ```python # 主模块记录INFO及以上 main_logger = logging.getLogger('main') main_logger.setLevel(logging.INFO) # 数据库模块记录DEBUG及以上 db_logger = logging.getLogger('main.database') db_logger.setLevel(logging.DEBUG) ``` --- #### 三、高级功能 1. **日志轮转(自动分割)** 使用`RotatingFileHandler`按大小分割: ```python from logging.handlers import RotatingFileHandler handler = RotatingFileHandler( 'app.log', maxBytes=5*1024*1024, # 5MB分割 backupCount=3 # 保留3个备份 ) logger.addHandler(handler) ``` 2. **异常追踪** `exception()`自动记录堆栈: ```python try: 1/0 except Exception: logging.exception("除零错误:") # 输出:ERROR: 除零错误: Traceback (most recent call last)... ``` --- ### 核心优势 vs print重定向 | 特性 | logging模块 | print重定向 | |--------------------|-----------------------------|------------------------| | **日志分级** | 支持DEBUG/INFO/WARNING等5级 | 无级别 | | **输出目标** | 支持文件/控制台/邮件等 | 仅文件或控制台 | | **性能** | 异步写入,低性能影响 | 同步写入,可能阻塞程序 | | **异常处理** | 自动捕获异常堆栈 | 需手动实现 | | **多模块管理** | 支持父子记录器 | 全局单一输出 | > **生产环境推荐**:logging模块提供完整的日志生命周期管理[^1][^4]
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值