共计 2440 个字符,预计需要花费 7 分钟才能阅读完成。
在处理文件和执行其他任务时,程序可能会遇到错误或异常。为了有效地跟踪和解决问题,我们需要记录错误信息。Python 提供了强大的 logging 模块,可以帮助我们记录程序的运行日志,特别是在批量文件操作中,记录错误信息尤为重要。
- 使用
logging模块记录日志
logging模块是 Python 提供的标准日志记录工具。我们可以将日志信息记录到控制台、文件或其他目的地。基本用法如下:
import logging
# 配置日志记录器
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
# 记录信息
logging.debug(' 这是一条调试信息 ')
logging.info(' 这是一条普通信息 ')
logging.warning(' 这是一条警告信息 ')
logging.error(' 这是一条错误信息 ')
logging.critical(' 这是一条严重错误信息 ')
debug():详细信息,通常用于开发和调试。info():常规信息,用于显示程序的进度或状态。warning():警告信息,表示程序运行可能出现问题。error():错误信息,表示发生了错误,但程序能够继续运行。critical():严重错误信息,表示发生了无法恢复的错误,程序无法继续运行。
- 将日志输出到文件
默认情况下,日志会输出到控制台。我们可以通过配置将日志记录到文件中:
import logging
# 配置日志记录到文件
logging.basicConfig(filename='app.log', level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')
# 记录日志
logging.info(' 日志记录到文件中 ')
这样,所有日志信息将被写入 app.log 文件中,便于后续查看和分析。
- 记录错误信息到日志
在处理文件时,程序很容易出现错误。通过try-except语句结合logging,我们可以在出现异常时记录错误信息:
import logging
# 配置日志
logging.basicConfig(filename='error_log.txt', level=logging.ERROR, format='%(asctime)s - %(levelname)s - %(message)s')
try:
with open('non_existent_file.txt', 'r') as f:
content = f.read()
except Exception as e:
logging.error(f' 错误发生:{e}')
如果文件 non_existent_file.txt 不存在,将记录错误信息到 error_log.txt 文件中。
- 记录文件操作的日志
在批量处理文件时,记录每个文件的处理状态(如成功、失败、跳过等)非常重要。我们可以结合logging模块和文件操作来实现日志记录。
import logging
import os
# 配置日志
logging.basicConfig(filename='file_operations.log', level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
def process_files(folder_path):
files = os.listdir(folder_path)
for filename in files:
try:
file_path = os.path.join(folder_path, filename)
# 假设我们在这里对文件进行某种处理
if filename.endswith(".txt"):
# 处理文件
logging.info(f" 处理成功:{file_path}")
else:
logging.warning(f" 跳过文件(不是文本文件):{file_path}")
except Exception as e:
logging.error(f" 处理文件 {filename} 时出错:{e}")
# 执行文件处理
process_files("./files_to_process")
此代码会记录每个文件的处理结果,如果遇到错误,会记录错误信息。如果文件不是 .txt 格式,则跳过并记录警告信息。
- 设置日志级别与日志轮转
日志的级别控制了哪些日志信息会被记录。如果你只关心错误信息,可以设置日志级别为logging.ERROR。此外,日志文件可能会变得很大,因此需要进行日志轮转。
import logging
from logging.handlers import RotatingFileHandler
# 配置日志轮转
handler = RotatingFileHandler('app.log', maxBytes=2000, backupCount=5)
logging.basicConfig(handlers=[handler], level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')
logging.info(' 这是一个日志轮转示例 ')
在此示例中,当 app.log 文件超过 2000 字节时,日志会自动轮转,最多保留 5 个备份文件。
总结:
logging 模块使得程序能够高效地记录日志信息,尤其在文件处理、数据处理等任务中非常有用。通过配置日志级别、输出格式以及日志轮转,我们可以有效地管理程序的日志。通过记录日志,我们能够追踪程序的运行状态、错误和异常,便于后续调试和维护。
练习与思考:
- 修改
process_files()函数,记录每个文件的处理时间。 - 在文件处理过程中,使用
logging记录文件的读取内容(只记录前 100 个字符)。 - 实现一个程序,使用日志记录文件的上传、下载、删除等操作,并根据操作类型设置不同的日志级别。
正文完