Files
mchat/ai-chat-backend/pkg/log/rotate_writer.go
2026-04-04 22:39:16 +08:00

59 lines
1.1 KiB
Go

package log
import (
"gopkg.in/natefinch/lumberjack.v2"
"io"
"sync"
)
type fileRotateWriter struct {
data map[string]io.Writer
sync.RWMutex
}
func (frw *fileRotateWriter) getWriter(logPath string) io.Writer {
frw.RLock()
defer frw.RUnlock()
w, ok := frw.data[logPath]
if !ok {
return nil
}
return w
}
func (frw *fileRotateWriter) setWriter(logPath string, w io.Writer) io.Writer {
frw.Lock()
defer frw.Unlock()
frw.data[logPath] = w
return w
}
var _fileRotateWriter *fileRotateWriter
func init() {
_fileRotateWriter = &fileRotateWriter{
data: map[string]io.Writer{},
}
}
func GetRotateWriter(logPath string) io.Writer {
if logPath == "" {
panic("日志文件路径不能为空")
}
writer := _fileRotateWriter.getWriter(logPath)
if writer != nil {
return writer
}
writer = &lumberjack.Logger{
//文件名
Filename: logPath,
//单个文件大小单位MB
MaxSize: 1,
//最多保留文件数
MaxBackups: 15,
//最长保留时间(天)
MaxAge: 7,
LocalTime: true,
}
return _fileRotateWriter.setWriter(logPath, writer)
}