Python日志打印案例如何输出日志信息

wen python案例 21

本文目录导读:

Python日志打印案例如何输出日志信息

  1. 基础配置和打印
  2. 自定义格式和输出到文件
  3. 同时输出到控制台和文件
  4. 带变量和异常的日志
  5. 模块化日志配置
  6. 实际应用案例
  7. 日志轮转
  8. 运行效果示例

我来给你几个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日志打印的主要用法,你可以根据实际需求选择合适的配置方式。

抱歉,评论功能暂时关闭!