01-日志与监控
本章讲解 Python 日志记录和应用监控的最佳实践。
Python logging 模块
基础用法
python
import logging
# 配置日志
logging.basicConfig(
level=logging.DEBUG,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
handlers=[
logging.FileHandler('app.log'),
logging.StreamHandler()
]
)
logger = logging.getLogger(__name__)
# 不同级别的日志
logger.debug("调试信息")
logger.info("正常运行消息")
logger.warning("警告信息")
logger.error("错误信息")
logger.critical("严重错误")日志级别
| 级别 | 数值 | 使用场景 |
|---|---|---|
| DEBUG | 10 | 调试信息 |
| INFO | 20 | 正常运行消息 |
| WARNING | 30 | 潜在问题 |
| ERROR | 40 | 功能执行失败 |
| CRITICAL | 50 | 系统可能崩溃 |
高级日志配置
日志轮转
python
from logging.handlers import RotatingFileHandler, TimedRotatingFileHandler
# 按大小轮转
rotating_handler = RotatingFileHandler(
'logs/app.log',
maxBytes=10*1024*1024, # 10MB
backupCount=5
)
# 按时间轮转
timed_handler = TimedRotatingFileHandler(
'logs/app.log',
when='midnight',
backupCount=30
)配置文件
python
LOGGING_CONFIG = {
'version': 1,
'formatters': {
'default': {
'format': '%(asctime)s - %(name)s - %(levelname)s - %(message)s',
},
},
'handlers': {
'console': {
'class': 'logging.StreamHandler',
'formatter': 'default',
},
'file': {
'class': 'logging.handlers.RotatingFileHandler',
'filename': 'logs/app.log',
'maxBytes': 10485760,
'backupCount': 5,
},
},
'root': {
'level': 'INFO',
'handlers': ['console', 'file'],
},
}结构化日志
JSON 格式日志
bash
# 安装
uv add python-json-loggerpython
from pythonjsonlogger import jsonlogger
formatter = jsonlogger.JsonFormatter(
fmt='%(asctime)s %(name)s %(levelname)s %(message)s'
)
logger.info("User login", extra={
"user_id": 123,
"ip_address": "192.168.1.1"
})性能监控
装饰器记录执行时间
python
import time
from functools import wraps
def timing_decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
start = time.time()
result = func(*args, **kwargs)
logger.info(f"{func.__name__} executed in {time.time() - start:.3f}s")
return result
return wrapper健康检查端点
python
from flask import Flask, jsonify
import psutil
app = Flask(__name__)
@app.route('/health')
def health_check():
return jsonify({
"status": "healthy",
"metrics": {
"cpu_percent": psutil.cpu_percent(),
"memory_percent": psutil.virtual_memory().percent,
}
})本章小结
┌─────────────────────────────────────────────────────────────┐
│ 日志与监控 知识要点 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 日志级别: │
│ ✓ DEBUG < INFO < WARNING < ERROR < CRITICAL │
│ │
│ 日志配置: │
│ ✓ 使用 dictConfig 配置 │
│ ✓ 实现日志轮转 │
│ │
│ 结构化日志: │
│ ✓ 使用 JSON 格式 │
│ ✓ 添加上下文信息 │
│ │
│ 监控: │
│ ✓ 健康检查端点 │
│ ✓ 性能指标收集 │
│ │
└─────────────────────────────────────────────────────────────┘