logging模块的四大组件

这篇博客介绍了Python日志模块的基本组件,包括Logger、Handler和Formatter,并展示了如何使用Handler中的TimedRotatingFileHandler类按天进行日志文件的轮转。示例代码创建了两个Handler,一个用于记录所有级别的日志到'all.log',另一个仅记录错误及以上级别的日志到'error.log'。通过设置,日志文件在每天午夜时分会自动滚动并保留7天的历史记录。

1.四大组件

四大组件包括:Logger,Handler,Filter和Formatter。
在这里插入图片描述

2.Logger类的相关方法

logger类的主要方法如下:
在这里插入图片描述

3.Handler类

Handler对象的作用是基于日志消息的level,将消息分发到handler指定的位置,例如文件,网络等。常用的方法如下所示:
在这里插入图片描述
handler的相关子类如下所示:
在这里插入图片描述
代码如下:会在同目录下生成一个all.log文件

import logging
import logging.handlers
import datetime

logger = logging.getLogger('mylogger')
logger.setLevel(logging.DEBUG)

rf_handler = logging.handlers.TimedRotatingFileHandler('all.log', when='midnight', interval=1, backupCount=7, atTime=datetime.time(0, 0, 0, 0))
rf_handler.setFormatter(logging.Formatter("%(asctime)s - %(levelname)s - %(message)s"))

f_handler = logging.FileHandler('error.log')
f_handler.setLevel(logging.ERROR)
f_handler.setFormatter(logging.Formatter("%(asctime)s - %(levelname)s - %(filename)s[:%(lineno)d] - %(message)s"))

logger.addHandler(rf_handler)
logger.addHandler(f_handler)

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

输出如下:
在这里插入图片描述

<think>嗯,用户想了解Python的logging模块的用法、示例和配置。首先,我得回忆一下logging模块的基本结构,比如日志级别、组件LoggerHandler、Formatter、Filter这些。用户可能需要从基础开始,所以先介绍日志级别,然后各个组件的作用。 接下来,用户可能需要具体的示例代码,比如如何输出到控制台和文件。我记得basicConfig是最简单的配置方法,但高级配置可能需要使用dictConfig或者文件配置,比如logging.config模块。要确保示例代码正确,语法没有问题,同时用中文注释解释每一步。 配置部分,用户可能想知道如何通过代码配置或者配置文件,比如使用.ini或.yaml格式。需要提到不同的处理器,比如RotatingFileHandler和TimedRotatingFileHandler,用于日志轮换,防止日志文件过大。还要说明Formatter的格式字符串,比如时间、级别、消息等。 另外,用户可能关心最佳实践,比如如何在不同环境中配置日志,如何避免常见错误,比如重复日志输出。需要提醒addHandler的注意事项,以及如何设置不同模块的日志级别。 关于引用,用户提供的引用中有提到logging模块的基本使用、配置步骤、项目实战等,需要把这些引用自然地融入到回答中,比如在讲配置时引用[^2],讲示例时引用[^1]。 生成的相关问题要围绕logging模块的扩展,比如日志回滚、多模块使用、调试技巧、第三方库、Django集成等,这些能帮助用户进一步深入学习。 最后,确保回答结构清晰,分点说明,代码示例正确,并且引用标记正确,符合用户给的系统级指令中的格式要求,比如数学公式用$...$,独立公式用$$...$$,但这里可能用不上数学公式,所以主要注意代码块和引用。</think>### Python logging模块使用指南 #### 一、核心组件与日志级别 1. **5级日志体系** - DEBUG(调试细节): $level=10$ - INFO(运行状态): $level=20$ - WARNING(潜在问题): $level=30$ - ERROR(功能错误): $level=40$ - CRITICAL(系统崩溃): $level=50$ 2. **四大核心对象** - Logger:日志记录入口 - Handler:定义输出位置(控制台/文件/网络) - Formatter:设置日志格式模板 - Filter:日志过滤规则 #### 二、快速入门示例 ```python import logging # 基础配置(输出到控制台) logging.basicConfig( level=logging.DEBUG, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s' ) logger = logging.getLogger(__name__) logger.info('系统启动完成') # 输出示例:2023-10-01 12:00:00 - __main__ - INFO - 系统启动完成[^1] ``` #### 三、进阶配置方案 **方案1:代码动态配置** ```python from logging.handlers import RotatingFileHandler logger = logging.getLogger('app') logger.setLevel(logging.INFO) # 创建文件处理器(限制单个文件10MB,保留3个备份) handler = RotatingFileHandler( 'app.log', maxBytes=10*1024*1024, backupCount=3 ) formatter = logging.Formatter('%(levelname)-8s [%(filename)s:%(lineno)d] %(message)s') handler.setFormatter(formatter) logger.addHandler(handler) ``` **方案2:配置文件(logging.conf)** ```ini [loggers] keys=root,app [handlers] keys=consoleHandler,fileHandler [formatters] keys=simpleFormatter [logger_root] level=DEBUG handlers=consoleHandler [logger_app] level=INFO handlers=fileHandler qualname=app [handler_consoleHandler] class=StreamHandler level=WARNING formatter=simpleFormatter [handler_fileHandler] class=handlers.TimedRotatingFileHandler level=INFO formatter=simpleFormatter args=('app.log', 'midnight', 1, 7) ``` #### 四、最佳实践技巧 1. **多模块日志管理** ```python # 主模块 main_logger = logging.getLogger('app.core') # 子模块 sub_logger = logging.getLogger('app.utils') ``` 2. **异常追踪优化** ```python try: risky_operation() except Exception as e: logger.exception('操作异常: ') # 自动附加堆栈信息 ``` 3. **日志性能优化** - 使用`logging.handlers.QueueHandler`实现异步日志 - 避免在循环中重复创建Handler对象[^3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

永远不要矫情

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值