72 lines
1.4 KiB
Go
72 lines
1.4 KiB
Go
package log
|
||
|
||
import (
|
||
"io"
|
||
"time"
|
||
|
||
rotatelogs "github.com/lestrrat/go-file-rotatelogs"
|
||
)
|
||
|
||
type WriteSyncer interface {
|
||
io.Writer
|
||
Sync() error
|
||
}
|
||
|
||
// 得到LogWriter
|
||
func getLogWriter(filePath string, period, count int) WriteSyncer {
|
||
warnIoWriter := getWriter(filePath, period, count)
|
||
return addSync(warnIoWriter)
|
||
}
|
||
|
||
// 日志文件切割
|
||
func getWriter(filename string, period, count int) io.Writer {
|
||
// 保存日志count天,每period小时分割一次日志
|
||
duration := time.Hour * time.Duration(period)
|
||
var logfile string
|
||
if period >= 24 {
|
||
logfile = filename + "-%Y%m%d"
|
||
} else {
|
||
logfile = filename + "-%Y%m%d%H"
|
||
}
|
||
hook, err := rotatelogs.New(
|
||
|
||
logfile,
|
||
rotatelogs.WithLinkName(filename),
|
||
// rotatelogs.WithMaxAge(duration),
|
||
rotatelogs.WithRotationCount(count),
|
||
rotatelogs.WithRotationTime(duration),
|
||
rotatelogs.WithLocation(time.Local),
|
||
)
|
||
|
||
//保存日志30天,每1分钟分割一次日志
|
||
/*
|
||
hook, err := rotatelogs.New(
|
||
filename+"_%Y%m%d%H%M.log",
|
||
rotatelogs.WithLinkName(filename),
|
||
rotatelogs.WithMaxAge(time.Hour*24*30),
|
||
rotatelogs.WithRotationTime(time.Minute*1),
|
||
)
|
||
*/
|
||
if err != nil {
|
||
panic(err)
|
||
}
|
||
return hook
|
||
}
|
||
|
||
func addSync(w io.Writer) WriteSyncer {
|
||
switch w := w.(type) {
|
||
case WriteSyncer:
|
||
return w
|
||
default:
|
||
return writerWrapper{w}
|
||
}
|
||
}
|
||
|
||
type writerWrapper struct {
|
||
io.Writer
|
||
}
|
||
|
||
func (w writerWrapper) Sync() error {
|
||
return nil
|
||
}
|