日志系统
日志级别
框架定义了6个日志级别,按严重程度从低到高排列:
- [TraceLevel] - 跟踪级别
- [DebugLevel] - 调试级别
- [InfoLevel] - 信息级别
- [WarnLevel] - 警告级别
- [ErrorLevel] - 错误级别
- [PanicLevel] - 崩溃级别
日志配置
通过[Logger](file:///Volumes/未命名/代码/fun/logger.go#L27-L33)结构体可以配置日志系统的行为:
go
type Logger struct {
Level uint8 // 日志级别
Mode uint8 // 输出模式(终端或文件)
MaxSizeFile uint8 // 单个日志文件最大大小(MB)
MaxNumberFiles uint64 // 最大日志文件数量
ExpireLogsDays uint8 // 日志文件保留天数
}
使用方法
基本日志输出
框架提供了对应各个级别的日志输出函数:
go
fun.TraceLogger("这是跟踪日志")
fun.DebugLogger("这是调试日志")
fun.InfoLogger("这是信息日志")
fun.WarnLogger("这是警告日志")
fun.ErrorLogger("这是错误日志")
fun.PanicLogger("这是崩溃日志")
配置日志系统
通过ConfigLogger
函数可以自定义日志配置:
go
logger := &fun.Logger{
Level: fun.InfoLevel,
Mode: fun.FileMode,
MaxSizeFile: 10, // 10MB
MaxNumberFiles: 100, // 最多100个文件
ExpireLogsDays: 30, // 保留30天
}
fun.ConfigLogger(logger)
日志文件管理
当使用文件模式时,日志系统会自动管理日志文件:
- 按日期分割日志文件(格式:
YYYY-MM-DD.log.N
) - 当日志文件超过设定大小时创建新文件
- 自动清理过期日志文件
- 限制日志文件总数量
日志格式
日志输出格式如下:
[时间] [级别] [调用函数] 消息内容
例如:
[2025-07-31 15:11:54] [INFO ] [fun.Fun.handleMessage ] {"id":"TGmbI_fsDpt7x9qrJEJ94","methodName":"HalloWord","serviceName":"UserService","type":0,"state":{},"dto":{"Name":"World","User":"User"}}
特性
- 异步处理:日志通过goroutine异步处理,不会阻塞主业务逻辑
- 自动轮转:支持按大小和时间自动轮转日志文件
- 自动清理:定期清理过期日志文件
- 多模式支持:支持终端输出和文件输出两种模式
- 详细定位:日志中包含详细的函数调用位置信息
错误处理
框架在处理panic时会自动记录堆栈信息到日志中,例如:
[2025-07-31 15:44:17] [PANIC ] [fun.BindService.func1 ] Fun: HalloWord1 Parameter is not struct
goroutine 1 [running, locked to thread]:
fun.BindService.func1()
/Volumes/未命名/代码/fun/fun.go:200 +0x6b
panic({0x4f4d760?, 0xc000106280?})
/usr/local/opt/go/libexec/src/runtime/panic.go:785 +0x132
...
这套日志系统为开发者提供了全面的日志记录和管理能力,有助于问题排查和系统监控。