xuanxi 发表于 2018-9-20 07:54:43

golang之log rotate

/*  
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, "", log.Ldate|log.Ltime|log.Lshortfile)
  
}
  
return logger, logFile
  
}
  

  
func logWorker(msgQueueMAX_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
页: [1]
查看完整版本: golang之log rotate