创建一个记录工具操作步骤和执行结果的logger,并保存到文件中
时间: 2025-07-21 14:02:07 AIGC 浏览: 13
<think>我们使用Python内置的logging模块来创建日志记录器。根据需求,我们需要记录操作步骤和执行结果,并保存到文件。
我们将配置一个logger,使其可以将日志信息输出到控制台(可选)和文件。同时,我们会设置日志的格式,包括时间、日志级别和消息内容。
步骤:
1. 导入logging模块。
2. 创建一个logger对象。
3. 设置logger的日志级别(例如,INFO级别可以记录操作步骤和结果)。
4. 创建一个文件处理器(FileHandler),用于将日志写入文件。
5. 创建一个格式化器(Formatter),定义日志的输出格式(例如:时间、日志级别、消息)。
6. 将格式化器添加到文件处理器。
7. 将文件处理器添加到logger对象。
8. 可选:创建一个控制台处理器(StreamHandler)并添加到logger,以便同时在控制台输出。
根据引用[3]中的示例,我们可以创建一个logger并配置它。
注意:为了避免重复记录,我们通常只在主模块中配置一次logger。如果是在模块中使用,最好使用__name__来命名logger。
下面是一个创建logger的示例代码:</think>以下是如何使用 Python 的 `logging` 模块创建日志记录器,记录工具操作步骤和执行结果并保存到文件的完整方案:
### 解决方案
```python
import logging
import os
from datetime import datetime
def setup_logger(log_file_path=None, log_level=logging.INFO):
"""创建并配置日志记录器
Args:
log_file_path (str): 日志文件路径,默认使用时间戳命名
log_level: 日志级别(默认为INFO)
Returns:
logging.Logger: 配置好的日志记录器
"""
# 创建记录器
logger = logging.getLogger('ToolLogger')
logger.setLevel(log_level)
# 设置默认日志文件名(带时间戳)
if not log_file_path:
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
log_file_path = f"tool_operations_{timestamp}.log"
# 创建文件处理器(保存到文件)
file_handler = logging.FileHandler(log_file_path)
file_handler.setLevel(log_level)
# 创建控制台处理器(可选)
console_handler = logging.StreamHandler()
console_handler.setLevel(log_level)
# 创建格式化器
formatter = logging.Formatter(
'%(asctime)s - %(name)s - %(levelname)s - %(message)s',
datefmt='%Y-%m-%d %H:%M:%S'
)
# 应用格式化器
file_handler.setFormatter(formatter)
console_handler.setFormatter(formatter)
# 添加处理器到记录器
logger.addHandler(file_handler)
logger.addHandler(console_handler) # 可选:同时在控制台输出
return logger
# 使用示例
if __name__ == "__main__":
# 初始化日志记录器
logger = setup_logger()
# 记录操作步骤和执行结果
logger.info("工具初始化完成")
try:
# 模拟操作步骤
logger.debug("开始执行数据预处理...")
# ... 工具操作代码 ...
logger.info("数据预处理完成,共处理1000条记录")
logger.debug("开始执行数据分析...")
# ... 工具操作代码 ...
logger.info("分析完成,发现异常值15个")
# 记录成功结果
logger.info("所有操作成功完成!")
except Exception as e:
# 记录错误信息
logger.error(f"操作失败: {str(e)}", exc_info=True)
```
### 关键功能说明
1. **日志级别控制**:
- `DEBUG`:详细调试信息(工具内部状态)
- `INFO`:操作步骤和结果(默认级别)
- `WARNING`:潜在问题
- `ERROR`:操作失败
2. **日志格式**:
```
2023-08-15 14:30:45 - ToolLogger - INFO - 数据预处理完成,共处理1000条记录
```
3. **文件输出**:
- 自动生成带时间戳的日志文件(如 `tool_operations_20230815_143045.log`)
- 包含完整时间、日志名称、级别和消息
4. **错误处理**:
- 自动捕获并记录异常堆栈信息(`exc_info=True`)
- 区分错误类型和正常操作记录
### 使用示例
```python
# 在工具代码中使用
logger = setup_logger("my_tool_operations.log")
def process_data(data):
logger.info(f"开始处理数据集,大小: {len(data)}")
# ... 处理逻辑 ...
if success:
logger.info(f"处理完成,有效记录: {valid_count}")
else:
logger.error("数据处理失败,数据格式异常")
```
### 进阶配置建议
1. **日志轮转**(引用[1]):
```python
from logging.handlers import RotatingFileHandler
# 替换FileHandler为轮转日志(最大100MB,保留3份备份)
handler = RotatingFileHandler(
"tool.log", maxBytes=100*1024*1024, backupCount=3
)
```
2. **添加操作步骤过滤器**(引用[4]):
```python
class OperationFilter(logging.Filter):
def filter(self, record):
return "STEP" in record.getMessage()
# 添加过滤器
logger.addFilter(OperationFilter())
```
3. **多模块日志**:
```python
# 在不同模块中使用相同记录器
module_logger = logging.getLogger('ToolLogger.module1')
```
### 日志文件示例输出
```
2023-08-15 14:30:45 - ToolLogger - INFO - 工具初始化完成
2023-08-15 14:31:02 - ToolLogger - INFO - 开始处理数据集,大小: 1000
2023-08-15 14:31:25 - ToolLogger - INFO - 数据验证完成,有效记录: 982
2023-08-15 14:32:10 - ToolLogger - ERROR - 数据处理失败,数据格式异常
Traceback (most recent call last):
File "tool.py", line 45, in process_data
value = int(invalid_data)
ValueError: invalid literal for int() with base 10: 'abc'
```
阅读全文
相关推荐




