在 Python 中,可以通过内置的 logging
模块实现灵活的日志记录。以下是详细的实现方法和示例:
1. 基础用法
import logging
# 配置基础日志(默认输出到控制台)
logging.basicConfig(level=logging.INFO) # 设置日志级别为INFO
# 记录日志
logging.debug("调试信息") # 不会输出(级别低于INFO)
logging.info("普通信息") # 输出:INFO:root:普通信息
logging.warning("警告信息") # 输出:WARNING:root:警告信息
logging.error("错误信息") # 输出:ERROR:root:错误信息
2. 日志级别
级别从低到高:DEBUG
< INFO
< WARNING
< ERROR
< CRITICAL
通过 level
参数控制输出的级别。
3. 输出到文件
import logging
logging.basicConfig(
filename='app.log', # 日志文件路径
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
logging.info("这条日志会写入文件")
4. 高级配置(推荐)
使用 Logger
对象更灵活地管理日志:
import logging
# 创建Logger实例
logger = logging.getLogger("my_app")
logger.setLevel(logging.DEBUG) # 设置日志级别
# 创建文件处理器
file_handler = logging.FileHandler('app.log')
file_handler.setLevel(logging.INFO)
# 创建控制台处理器
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.DEBUG)
# 设置日志格式
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
file_handler.setFormatter(formatter)
console_handler.setFormatter(formatter)
# 添加处理器到Logger
logger.addHandler(file_handler)
logger.addHandler(console_handler)
# 使用日志
logger.debug("调试信息") # 输出到控制台(文件不记录)
logger.info("运行信息") # 输出到控制台和文件
5. 常见配置参数
-
format
自定义格式:format='%(asctime)s | %(levelname)8s | %(filename)s:%(lineno)d | %(message)s'
输出示例:
2023-01-01 12:00:00 | INFO | main.py:10 | 这是一条日志
-
datefmt
自定义时间格式:format='%(asctime)s %(message)s', datefmt='%Y/%m/%d %H:%M:%S'
6. 日志文件轮转
使用 RotatingFileHandler
防止日志文件过大:
from logging.handlers import RotatingFileHandler
handler = RotatingFileHandler(
'app.log', maxBytes=5*1024*1024, backupCount=3 # 每个文件5MB,保留3个备份
)
logger.addHandler(handler)
7. 捕获异常信息
通过 exc_info=True
记录异常堆栈:
try:
1 / 0
except Exception as e:
logging.error("发生异常:", exc_info=True) # 会记录完整的Traceback
- 简单场景:直接使用
logging.basicConfig()
- 复杂项目:通过
Logger
对象 + 多处理器(文件/控制台) - 关键点:合理设置日志级别、格式化和异常捕获
通过以上方法,可以高效地实现生产级的日志记录。
(www.nzw6.com)