本文目录导读:

我来给你几个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日志打印的主要用法,你可以根据实际需求选择合适的配置方式。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播