|
/*
golang log rotate example
E-Mail : Mike_Zhang@live.com
*/
package main
import (
"fmt"
"log"
"os"
"time"
)
const (
BACKUP_COUNT = 5
MAX_FILE_BYTES = 2 * 1024
)
func doRotate(fPrefix string) {
for j := BACKUP_COUNT; j >= 1; j-- {
curFileName := fmt.Sprintf("%s_%d.log",fPrefix,j)
k := j-1
preFileName := fmt.Sprintf("%s_%d.log",fPrefix,k)
if k == 0 {
preFileName = fmt.Sprintf("%s.log", fPrefix)
}
_,err := os.Stat(curFileName)
if err == nil {
os.Remove(curFileName)
fmt.Println("remove : ", curFileName)
}
_,err = os.Stat(preFileName)
if err == nil {
fmt.Println("rename : ", preFileName, " => ", curFileName)
err = os.Rename(preFileName, curFileName)
if err != nil {
fmt.Println(err)
}
}
}
}
func NewLogger(fPrefix string) (*log.Logger, *os.File) {
var logger *log.Logger
fileName := fmt.Sprintf("%s.log", fPrefix)
fmt.Println("fileName :", fileName)
logFile, err := os.OpenFile(fileName, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
if err != nil {
fmt.Println("open file error!")
} else {
logger = log.New(logFile, "[Debug]", log.Ldate|log.Ltime|log.Lshortfile)
}
return logger, logFile
}
func logWorker(msgQueue MAX_FILE_BYTES {
logFile.Close()
doRotate(fPrefix)
logger,logFile = NewLogger(fPrefix)
}
}
}
logFile.Close()
}
func main() {
msgQueue := make(chan string, 1000)
go logWorker(msgQueue)
for j := 1; j |
|
|