8.6 KiB
8.6 KiB
📝 按级别分文件日志系统说明
概述
本系统支持按日志级别分文件存储,不同级别的日志写入不同的文件,便于日志管理和分析。
功能特性
✅ 按级别分文件
- Debug级别:
debug.log- 调试信息 - Info级别:
info.log- 一般信息 - Warn级别:
warn.log- 警告信息 - Error级别:
error.log- 错误信息 - Fatal级别:
fatal.log- 致命错误 - Panic级别:
panic.log- 恐慌错误
✅ 独立配置
- 每个级别可以独立配置文件大小、备份数量、保留天数
- 支持不同级别的压缩策略
- 灵活的轮转配置
✅ 按日分包支持
- 支持按日期分包:
logs/2024-01-01/error.log - 传统模式:
logs/error.log
配置说明
基础配置
logger:
# 基础配置
level: info
format: json
output: "file"
log_dir: "/app/logs"
use_daily: true
# 启用按级别分文件
enable_level_separation: true
# 各级别配置
level_configs:
debug:
max_size: 50 # 50MB
max_backups: 3
max_age: 7 # 7天
compress: true
info:
max_size: 100 # 100MB
max_backups: 5
max_age: 30 # 30天
compress: true
warn:
max_size: 100 # 100MB
max_backups: 5
max_age: 30 # 30天
compress: true
error:
max_size: 200 # 200MB
max_backups: 10
max_age: 90 # 90天
compress: true
fatal:
max_size: 100 # 100MB
max_backups: 10
max_age: 365 # 1年
compress: true
panic:
max_size: 100 # 100MB
max_backups: 10
max_age: 365 # 1年
compress: true
日志目录结构
按日分包模式
logs/
├── 2024-01-01/
│ ├── debug.log # 调试日志
│ ├── debug.log.1 # 调试日志备份
│ ├── info.log # 信息日志
│ ├── info.log.1 # 信息日志备份
│ ├── warn.log # 警告日志
│ ├── warn.log.1 # 警告日志备份
│ ├── error.log # 错误日志
│ ├── error.log.1 # 错误日志备份
│ ├── fatal.log # 致命错误日志
│ └── panic.log # 恐慌错误日志
├── 2024-01-02/
│ ├── debug.log
│ ├── info.log
│ ├── warn.log
│ ├── error.log
│ ├── fatal.log
│ └── panic.log
传统模式
logs/
├── debug.log # 调试日志
├── debug.log.1 # 调试日志备份
├── info.log # 信息日志
├── info.log.1 # 信息日志备份
├── warn.log # 警告日志
├── warn.log.1 # 警告日志备份
├── error.log # 错误日志
├── error.log.1 # 错误日志备份
├── fatal.log # 致命错误日志
└── panic.log # 恐慌错误日志
级别配置策略
1. Debug级别
- 用途: 详细的调试信息
- 保留策略: 短期保留(7天)
- 文件大小: 较小(50MB)
- 备份数量: 较少(3个)
2. Info级别
- 用途: 一般业务信息
- 保留策略: 中期保留(30天)
- 文件大小: 中等(100MB)
- 备份数量: 中等(5个)
3. Warn级别
- 用途: 警告信息
- 保留策略: 中期保留(30天)
- 文件大小: 中等(100MB)
- 备份数量: 中等(5个)
4. Error级别
- 用途: 错误信息
- 保留策略: 长期保留(90天)
- 文件大小: 较大(200MB)
- 备份数量: 较多(10个)
5. Fatal级别
- 用途: 致命错误
- 保留策略: 永久保留(1年)
- 文件大小: 中等(100MB)
- 备份数量: 较多(10个)
6. Panic级别
- 用途: 恐慌错误
- 保留策略: 永久保留(1年)
- 文件大小: 中等(100MB)
- 备份数量: 较多(10个)
使用方法
1. 基本使用
import "tyapi-server/internal/shared/logger"
// 获取日志器
log := logger.GetLogger()
// 不同级别的日志会自动写入对应文件
log.Debug("调试信息", zap.String("component", "user_service"))
log.Info("用户登录成功", zap.String("user_id", "12345"))
log.Warn("用户多次登录失败", zap.String("phone", "138****8888"))
log.Error("数据库连接失败", zap.Error(err))
log.Fatal("系统无法启动", zap.Error(err))
log.Panic("严重错误", zap.Error(err))
2. 带上下文的日志
// 从Gin上下文获取日志器
ctx := c.Request.Context()
log := logger.GetLogger().WithContext(ctx)
log.Info("处理用户请求",
zap.String("action", "user_login"),
zap.String("ip", c.ClientIP()),
)
3. 结构化日志字段
log.Info("业务操作",
zap.String("operation", "create_user"),
zap.String("user_id", user.ID),
zap.Int("age", user.Age),
zap.Float64("score", 95.5),
zap.Bool("is_active", true),
zap.Error(err),
)
日志分析
1. 查看特定级别日志
# 查看错误日志
tail -f logs/2024-01-01/error.log
# 查看警告日志
tail -f logs/2024-01-01/warn.log
# 查看信息日志
tail -f logs/2024-01-01/info.log
2. 统计各级别日志数量
# 统计错误日志数量
wc -l logs/2024-01-01/error.log
# 统计警告日志数量
wc -l logs/2024-01-01/warn.log
# 统计信息日志数量
wc -l logs/2024-01-01/info.log
3. 搜索特定内容
# 在错误日志中搜索特定错误
grep "数据库连接失败" logs/2024-01-01/error.log
# 在警告日志中搜索特定警告
grep "用户多次登录失败" logs/2024-01-01/warn.log
# 在信息日志中搜索特定操作
grep "用户登录成功" logs/2024-01-01/info.log
4. 使用jq分析JSON日志
# 分析错误日志
cat logs/2024-01-01/error.log | jq 'select(.level == "error")'
# 统计错误类型
cat logs/2024-01-01/error.log | jq -r '.message' | sort | uniq -c
# 查看特定用户的错误
cat logs/2024-01-01/error.log | jq 'select(.user_id == "12345")'
监控和告警
1. 错误日志监控
# 监控错误日志增长
watch -n 5 'wc -l logs/$(date +%Y-%m-%d)/error.log'
# 监控错误日志大小
watch -n 5 'ls -lh logs/$(date +%Y-%m-%d)/error.log'
2. 告警配置
# 检查错误日志是否超过阈值
if [ $(wc -l < logs/$(date +%Y-%m-%d)/error.log) -gt 1000 ]; then
echo "错误日志数量过多,请检查系统状态"
fi
# 检查错误日志文件大小
if [ $(stat -c%s logs/$(date +%Y-%m-%d)/error.log) -gt 104857600 ]; then
echo "错误日志文件过大,请检查系统状态"
fi
性能优化
1. 异步写入
- 日志写入是异步的,不会阻塞业务逻辑
- 使用缓冲写入减少I/O操作
2. 级别过滤
- 只记录配置的级别及以上级别的日志
- 减少不必要的日志输出
3. 文件轮转
- 自动轮转避免单个文件过大
- 压缩旧日志文件节省磁盘空间
最佳实践
1. 级别使用规范
- Debug: 详细的调试信息(开发环境)
- Info: 重要的业务信息(生产环境)
- Warn: 需要关注但不影响主功能的问题
- Error: 影响功能的错误信息
- Fatal: 系统无法继续运行的错误
- Panic: 程序崩溃的错误
2. 日志内容规范
- 记录关键业务操作
- 包含足够的上下文信息
- 使用结构化的字段
- 避免记录敏感信息
3. 文件管理规范
- 定期清理旧日志文件
- 监控日志文件大小
- 设置合理的轮转策略
- 备份重要日志
故障排除
1. 常见问题
问题: 某个级别的日志文件没有创建 解决: 检查该级别是否在配置中定义
问题: 日志文件权限问题 解决: 确保应用有写入日志目录的权限
问题: 磁盘空间不足 解决: 调整日志保留策略,减少保留天数
2. 性能问题
问题: 日志写入影响性能 解决: 检查是否启用了异步写入
问题: 日志文件过大 解决: 调整文件大小限制和轮转策略
相关文件
internal/shared/logger/level_logger.go- 按级别分文件日志器实现internal/config/config.go- 日志配置结构configs/env.production.yaml- 生产环境日志配置internal/container/container.go- 依赖注入配置