网站首页 > 技术文章 正文
日志文件是记录程序运行信息的重要工具,尤其是在调试和监控中。今天我们将学习如何在 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. 练习任务
- 编写一个日志工具类 Logger,封装日志的初始化和写入功能。
- 实现一个按文件大小滚动日志的功能,并测试当日志大小超过限制时是否正确滚动。
示例代码框架
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 文件操作,敬请期待!
猜你喜欢
- 2025-01-21 [819]ScalersTalk成长会Python小组第10周学习训练日志
- 2025-01-21 使用Python操作Jenkins(创建,构建,获取Job日志和报告)
- 2025-01-21 「python小脚本」监听日志文件异常数据发送告警短信
- 2025-01-21 告别千篇一律,Python打印彩色日志的方法!
- 2025-01-21 用Python写一个MacOS的系统通知
- 2025-01-21 Python 自制日志装饰器
- 2025-01-21 Python如何在日志中隐藏明文密码
- 2025-01-21 Kubernetes日志采集ELK|收集Python项目日志并展示
- 2025-01-21 Python接口自动化核心模块 - 数据库操作和日志
- 2025-01-21 python模块之 loguru 日志模块
- 05-25Python 3.14 t-string 要来了,它与 f-string 有何不同?
- 05-25Python基础元素语法总结
- 05-25Python中的变量是什么东西?
- 05-25新手常见的python报错及解决方案
- 05-2511-Python变量
- 05-2510个每个人都是需要知道Python问题
- 05-25Python编程:轻松掌握函数定义、类型及其参数传递方式
- 05-25Python基础语法
- 257℃Python短文,Python中的嵌套条件语句(六)
- 257℃python笔记:for循环嵌套。end=""的作用,图形打印
- 256℃PythonNet:实现Python与.Net代码相互调用!
- 251℃Python操作Sqlserver数据库(多库同时异步执行:增删改查)
- 251℃Python实现字符串小写转大写并写入文件
- 106℃原来2025是完美的平方年,一起探索六种平方的算吧
- 91℃Python 和 JavaScript 终于联姻了!PythonMonkey 要火?
- 81℃Ollama v0.4.5-v0.4.7 更新集合:Ollama Python 库改进、新模型支持
- 最近发表
- 标签列表
-
- python中类 (31)
- python 迭代 (34)
- python 小写 (35)
- python怎么输出 (33)
- python 日志 (35)
- python语音 (31)
- python 工程师 (34)
- python3 安装 (31)
- python音乐 (31)
- 安卓 python (32)
- python 小游戏 (32)
- python 安卓 (31)
- python聚类 (34)
- python向量 (31)
- python大全 (31)
- python次方 (33)
- python桌面 (32)
- python总结 (34)
- python浏览器 (32)
- python 请求 (32)
- python 前端 (32)
- python验证码 (33)
- python 题目 (32)
- python 文件写 (33)
- python中的用法 (32)