|
@@ -29,11 +29,67 @@ type WriterAsyncConfig struct {
|
|
|
Alerter diode.Alerter // 丢弃告警函数
|
|
Alerter diode.Alerter // 丢弃告警函数
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-// 实例化日志写入器,支持 滚动 与 异步
|
|
|
|
|
|
|
+// NewWriter 创建并返回一个配置完善的日志写入器,支持文件滚动和异步写入
|
|
|
|
|
+//
|
|
|
|
|
+// 该函数是日志库的核心工厂方法,根据配置创建具有不同特性的日志写入器
|
|
|
|
|
+// 支持文件自动轮转、备份管理、压缩存储以及高性能异步写入等功能
|
|
|
|
|
+//
|
|
|
|
|
+// 参数:
|
|
|
|
|
+//
|
|
|
|
|
+// fileName - 日志文件路径,包含完整路径的文件名(如 "logs/app.log")
|
|
|
|
|
+// c - 写入器配置,包含滚动配置和可选的异步配置
|
|
|
|
|
+//
|
|
|
|
|
+// 返回值:
|
|
|
|
|
+//
|
|
|
|
|
+// io.Writer - 符合标准 io.Writer 接口的日志写入器
|
|
|
|
|
+//
|
|
|
|
|
+// 功能特性:
|
|
|
|
|
+// - 文件滚动: 自动管理日志文件大小和数量,防止单个文件过大
|
|
|
|
|
+// - 备份管理: 支持配置最大备份数量和保留天数
|
|
|
|
|
+// - 压缩存储: 可选启用备份文件压缩,节省磁盘空间
|
|
|
|
|
+// - 异步写入: 可选启用无阻塞异步写入,提高日志记录性能
|
|
|
|
|
+// - 灵活配置: 支持组合不同的配置选项满足不同场景需求
|
|
|
|
|
+//
|
|
|
|
|
+// 使用示例:
|
|
|
|
|
+//
|
|
|
|
|
+// config := logx.WriterConfig{
|
|
|
|
|
+// Rolling: logx.WriterRollingConfig{
|
|
|
|
|
+// MaxMegabytes: 10, // 单文件最大 10MB
|
|
|
|
|
+// MaxDays: 30, // 保留 30 天
|
|
|
|
|
+// MaxBackups: 50, // 最多 50 个备份
|
|
|
|
|
+// Compress: true, // 压缩备份文件
|
|
|
|
|
+// },
|
|
|
|
|
+// Async: &logx.WriterAsyncConfig{
|
|
|
|
|
+// BufferSize: 1000, // 异步缓冲区大小
|
|
|
|
|
+// PollInterval: time.Millisecond * 100, // 轮询间隔
|
|
|
|
|
+// },
|
|
|
|
|
+// }
|
|
|
|
|
+//
|
|
|
|
|
+// writer := logx.NewWriter("logs/app.log", config)
|
|
|
|
|
+// logx.InitInfoWriter(writer)
|
|
|
|
|
+//
|
|
|
|
|
+// 配置组合说明:
|
|
|
|
|
+// - 仅滚动: 只配置 Rolling 字段,Async 设为 nil
|
|
|
|
|
+// - 滚动+异步: 同时配置 Rolling 和 Async 字段
|
|
|
|
|
+// - 仅异步: 不推荐,异步写入通常需要配合文件滚动使用
|
|
|
|
|
+//
|
|
|
|
|
+// 性能建议:
|
|
|
|
|
+// - 生产环境: 建议启用异步写入和文件压缩
|
|
|
|
|
+// - 高并发场景: 增大异步缓冲区大小减少日志丢失风险
|
|
|
|
|
+// - 磁盘空间敏感: 合理设置文件大小和备份数量
|
|
|
func NewWriter(fileName string, c WriterConfig) io.Writer {
|
|
func NewWriter(fileName string, c WriterConfig) io.Writer {
|
|
|
|
|
+ // 首先创建基础的文件滚动写入器
|
|
|
|
|
+ // 该写入器负责日志文件的自动轮转、备份管理和压缩存储
|
|
|
var w = tool.FileRollingWriter(fileName, c.Rolling.MaxBackups, c.Rolling.MaxDays, c.Rolling.MaxMegabytes, c.Rolling.Compress)
|
|
var w = tool.FileRollingWriter(fileName, c.Rolling.MaxBackups, c.Rolling.MaxDays, c.Rolling.MaxMegabytes, c.Rolling.Compress)
|
|
|
|
|
+
|
|
|
|
|
+ // 检查是否配置了异步写入
|
|
|
|
|
+ // 如果配置了异步写入,则包装基础写入器为异步写入器
|
|
|
if c.Async != nil {
|
|
if c.Async != nil {
|
|
|
|
|
+ // 使用异步写入器包装基础写入器
|
|
|
|
|
+ // 异步写入器提供无阻塞的高性能日志记录能力
|
|
|
return tool.WrapAsyncWriter(w, c.Async.BufferSize, c.Async.PollInterval, c.Async.Alerter)
|
|
return tool.WrapAsyncWriter(w, c.Async.BufferSize, c.Async.PollInterval, c.Async.Alerter)
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ // 如果没有配置异步写入,直接返回基础的文件滚动写入器
|
|
|
return w
|
|
return w
|
|
|
}
|
|
}
|