python将logger内容保存到日志文件中 + 将控制台信息保存到日志文件中 + 生成时间戳记录

本文介绍了如何在Python中使用logging模块创建Logger对象,实现控制台和文件的日志记录,并展示了如何通过TerminalLogger重定向控制台输出。同时,文中提及了生成时间戳的功能以增强日志的时序性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

总览

分为三个部分:
1、使用Logger对象输出,记录日志
2、使用重定向控制台输出,记录日志
3、生成时间戳

使用Logging模块记录日志

import logging
import sys
import os
import time
from datetime import datetime

class Logger():
    """ 使用logging模块创建logger对象,记录由logger输出的日志信息
    """
    def __init__(self, LoggerName, FileName, CmdLevel, FileLevel):
        # LoggerName:实例化对象的名字  FileName:外部文件名   CmdLevel:设置控制台中日志输出的级别  FileLevel:设置文件日志输出的级别
        self.logger = logging.getLogger(LoggerName)
        # 设置日志的级别
        self.logger.setLevel(logging.DEBUG)
        # 设置日志的输出格式
        fmt = logging.Formatter('%(asctime)s-%(name)s-%(levelname)s-%(message)s')

        # 借助handle将日志输出到test.log文件中
        fh = logging.FileHandler(FileName, encoding='utf-8')
        fh.setLevel(FileLevel)

        # 借助handle将日志输出到控制台
        ch = logging.StreamHandler()
        # ch.setLevel(CmdLevel)

        # 配置logger
        fh.setFormatter(fmt)
        # ch.setFormatter(fmt)

        # 给logger添加handle
        self.logger.addHandler(fh)
        # self.logger.addHandler(ch)

    def debug(self, message):
        self.logger.debug(message)

    def info(self, message):
        self.logger.info(message)

    def warn(self, message):
        self.logger.warning(message)

    
<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' ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

辰阳星宇

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

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

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

打赏作者

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

抵扣说明:

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

余额充值