59 lines
1.1 KiB
Go
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)
|
|
}
|