初始化
日志初始化
LoggerInit 配置全局日志记录器,支持控制台彩色输出和文件 JSON 记录
日志初始化
LoggerInit 方法配置并初始化全局日志记录器,支持双输出模式。
LoggerInit
func (r *Reg) LoggerInit()日志输出:
| 输出目标 | 格式 | 说明 |
|---|---|---|
| 控制台 | 彩色文本 | <时间戳> [<日志等级>] [<trace>] [<日志类型>] <输出内容> |
| 文件 | JSON | Info 级别及以上,支持自动切割和归档 |
实现细节
func (r *Reg) LoggerInit() {
// 创建日志切割写入器
rotator, err := xLog.NewRotatingWriter(xLog.RotatorConfig{
Dir: ".logs",
BaseName: "log",
Ext: ".log",
MaxSize: 10 * 1024 * 1024, // 10MB
})
if err != nil {
panic("[INIT] 日志切割器创建失败: " + err.Error())
}
// 确定日志级别
logLevel := slog.LevelInfo
debugMode := isDebugMode()
if debugMode {
logLevel = slog.LevelDebug
}
// 创建自定义 Handler
handler := xLog.NewLogHandler(xLog.HandlerConfig{
Console: os.Stdout,
File: rotator,
Level: logLevel,
IsDebugMode: debugMode,
})
// 设置为全局默认 logger
logger := slog.New(handler)
slog.SetDefault(logger)
}日志切割配置
字段
类型
日志切割规则
按大小切割
单文件超过 10MB 自动切割:
.logs/
├── log.log # 当前日志文件
├── log.0.log # 切割后的历史文件
├── log.1.log
└── log.2.log按时间归档
每天 00:00:05 将前一天日志打包:
.logs/
├── log.log
└── logger-2024-01-15.tar.gz # 归档文件日志级别
| 模式 | 日志级别 | 说明 |
|---|---|---|
调试模式 (DEBUG=true) | Debug | 输出所有级别日志 |
| 生产模式 | Info | 仅输出 Info 及以上级别 |
使用日志
import xLog "github.com/bamboo-services/bamboo-base-go/log"
// 创建带名称的日志记录器
log := xLog.WithName(xLog.NamedINIT)
log.Info(ctx, "服务启动成功")
log.Debug(ctx, "调试信息")
log.Error(ctx, "发生错误: " + err.Error())
// 带结构化参数
log.SugarDebug(ctx, "用户登录", "user_id", 123, "ip", "192.168.1.1")