本文目录导读:

我来给你几个Python日志打印的实用案例:
基础配置和打印
import logging
# 基础配置
logging.basicConfig(level=logging.DEBUG)
# 打印不同级别的日志
logging.debug("调试信息")
logging.info("普通信息")
logging.warning("警告信息")
logging.error("错误信息")
logging.critical("严重错误")
自定义格式和输出到文件
import logging
# 配置格式和文件输出
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
datefmt='%Y-%m-%d %H:%M:%S',
filename='app.log', # 输出到文件
filemode='a' # 追加模式
)
logging.info("程序开始运行")
logging.warning("这是一个警告")
logging.error("发生错误")
同时输出到控制台和文件
import logging
# 创建logger
logger = logging.getLogger('my_logger')
logger.setLevel(logging.DEBUG)
# 文件处理器
file_handler = logging.FileHandler('app.log', encoding='utf-8')
file_handler.setLevel(logging.DEBUG)
# 控制台处理器
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.INFO)
# 定义格式
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
file_handler.setFormatter(formatter)
console_handler.setFormatter(formatter)
# 添加处理器
logger.addHandler(file_handler)
logger.addHandler(console_handler)
# 使用日志
logger.debug("仅在文件中的调试信息")
logger.info("同时输出到文件和控制台")
带变量和异常的日志
import logging
logging.basicConfig(level=logging.INFO)
# 带变量的日志
user = "张三"
amount = 100.50
logging.info(f"用户 {user} 充值 {amount} 元")
# 记录异常信息
try:
result = 10 / 0
except ZeroDivisionError as e:
logging.error("计算发生错误", exc_info=True)
# 或使用
logging.exception("计算发生错误")
模块化日志配置
# config_logger.py
import logging
def setup_logger(name, log_file, level=logging.INFO):
"""配置日志记录器"""
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler = logging.FileHandler(log_file)
handler.setFormatter(formatter)
logger = logging.getLogger(name)
logger.setLevel(level)
logger.addHandler(handler)
return logger
# 使用示例
logger = setup_logger('my_app', 'my_app.log')
logger.info("应用程序启动")
logger.error("数据库连接失败")
实际应用案例
import logging
class UserService:
def __init__(self):
self.logger = logging.getLogger(__name__)
def create_user(self, username, email):
try:
self.logger.info(f"开始创建用户: {username}")
# 模拟业务逻辑
if not username or not email:
raise ValueError("用户名和邮箱不能为空")
# 成功创建
self.logger.info(f"用户 {username} 创建成功")
return True
except ValueError as e:
self.logger.warning(f"创建用户失败: {e}")
return False
except Exception as e:
self.logger.error(f"创建用户时发生未知错误: {e}", exc_info=True)
return False
# 使用
service = UserService()
service.create_user("张三", "zhangsan@example.com")
日志轮转
import logging
from logging.handlers import RotatingFileHandler
# 设置日志轮转,每5MB轮转一次,保留3个备份
handler = RotatingFileHandler(
'app.log',
maxBytes=5*1024*1024, # 5MB
backupCount=3
)
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
logger = logging.getLogger('rotating_logger')
logger.setLevel(logging.INFO)
logger.addHandler(handler)
# 使用
for i in range(100):
logger.info(f"第 {i+1} 条日志")
运行效果示例
控制台输出(案例3):
2024-01-15 10:30:45 - my_logger - INFO - 同时输出到文件和控制台
案例2):
2024-01-15 10:30:45 - root - INFO - 程序开始运行
2024-01-15 10:30:45 - root - WARNING - 这是一个警告
这些案例涵盖了Python日志打印的主要用法,你可以根据实际需求选择合适的配置方式。