程序员文章、书籍推荐和程序员创业信息与资源分享平台

网站首页 > 技术文章 正文

20 天学 Python 文件操作:Day 11 日志文件操作

hfteth 2025-01-21 17:54:26 技术文章 15 ℃

日志文件是记录程序运行信息的重要工具,尤其是在调试和监控中。今天我们将学习如何在 Python 中创建、写入和管理日志文件。


1. 什么是日志文件?

日志文件用于记录程序运行时的关键信息,例如:

  • 错误消息
  • 运行状态
  • 调试信息

通过日志文件,可以快速定位问题或了解程序的行为。


2. 使用 logging模块

Python 的 logging 模块提供了强大的日志功能,支持不同的日志级别和多种日志输出方式。

日志级别

  • DEBUG: 调试信息
  • INFO: 一般信息
  • WARNING: 警告信息
  • ERROR: 错误信息
  • CRITICAL: 严重错误

示例:基本日志操作

import logging

# 配置基本日志
logging.basicConfig(filename='app.log', level=logging.DEBUG,
                    format='%(asctime)s - %(levelname)s - %(message)s')

# 写入不同级别的日志
logging.debug('这是调试信息')
logging.info('这是一般信息')
logging.warning('这是警告信息')
logging.error('这是错误信息')
logging.critical('这是严重错误信息')

运行后,会在 app.log 文件中看到以下内容:

2024-12-25 10:00:00,000 - DEBUG - 这是调试信息
2024-12-25 10:00:00,001 - INFO - 这是一般信息
...

3. 滚动日志文件

对于长期运行的程序,日志文件可能会变得非常大。可以使用 logging.handlers 模块实现滚动日志。

示例:按文件大小滚动日志

import logging
from logging.handlers import RotatingFileHandler

# 创建滚动日志处理器
handler = RotatingFileHandler('app.log', maxBytes=1024, backupCount=3)
logging.basicConfig(level=logging.INFO, handlers=[handler])

for i in range(100):
    logging.info(f"日志条目 {i}")

此代码会在日志文件达到 1KB 时创建一个新文件,并保留最多 3 个备份文件:

  • app.log
  • app.log.1
  • app.log.2

4. 按日期滚动日志

使用 TimedRotatingFileHandler,可以按照时间间隔滚动日志。

示例:每天滚动日志

import logging
from logging.handlers import TimedRotatingFileHandler

# 创建按天滚动日志处理器
handler = TimedRotatingFileHandler('daily.log', when='D', interval=1, backupCount=7)
logging.basicConfig(level=logging.INFO, handlers=[handler])

logging.info("这是按天滚动的日志")

此代码会每天生成一个新日志文件,并保留最近 7 天的日志。


5. 自定义日志格式

可以通过 format 参数自定义日志内容的格式。

示例:自定义格式

logging.basicConfig(filename='custom.log', level=logging.INFO,
                    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')

logger = logging.getLogger('MyLogger')
logger.info("这是自定义格式的日志")

日志内容示例:

2024-12-25 10:00:00,000 - MyLogger - INFO - 这是自定义格式的日志

6. 练习任务

  1. 编写一个日志工具类 Logger,封装日志的初始化和写入功能。
  2. 实现一个按文件大小滚动日志的功能,并测试当日志大小超过限制时是否正确滚动。

示例代码框架

import logging
from logging.handlers import RotatingFileHandler

class Logger:
    def __init__(self, log_file, level=logging.INFO, max_bytes=1024, backup_count=3):
        self.logger = logging.getLogger('CustomLogger')
        handler = RotatingFileHandler(log_file, maxBytes=max_bytes, backupCount=backup_count)
        formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
        handler.setFormatter(formatter)
        self.logger.addHandler(handler)
        self.logger.setLevel(level)

    def log(self, level, message):
        if level == 'info':
            self.logger.info(message)
        elif level == 'error':
            self.logger.error(message)

# 示例
my_logger = Logger('example.log')
my_logger.log('info', '测试信息日志')

通过今天的学习,你已经掌握了日志文件的基本操作和管理技巧。明天我们将学习 Python 中的 CSV 文件操作,敬请期待!

Tags:

最近发表
标签列表