This is a golang library helps to write content into file and automatically rotate the file.
It implements io.Writer and io.Closer, so you can combine it with golang standard log library, or others log library such as logrus.
These are it's features:
- Rotate according to file size
- Rotate according to file lines
- Rotate daily
- Remove files that are n days ago
This is a example shows how to create a file rotator and combine with the logrus and the golang standard log library.
import (
log "github.com/Sirupsen/logrus"
rotator "github.com/firnsan/file-rotator"
"io"
stdlog "log"
"os"
)
func InitLog() error {
var err error
level, err := log.ParseLevel(gApp.Cnf.LogLevel)
if err != nil {
log.Errorf("Parse log level failed: %s", err)
return err
}
// Create a file rotator
fw, err := rotator.NewFileRotator(gApp.Cnf.LogDir + "/app.log")
if err != nil {
log.Errorf("Set log failed: %s", err)
return err
}
log.SetOutput(fw)
log.SetLevel(level)
// Also need to set the golang standard log's output to this writer
w := log.StandardLogger().Writer()
stdlog.SetOutput(w)
return nil
}
func UninitLog() {
// Close Writer
w := log.StandardLogger().Out
log.SetOutput(os.Stderr)
if wc, ok := w.(io.Closer); ok {
wc.Close()
}
log.Printf("Uninit log success")
}