lygyh9985825 发表于 2018-9-20 10:40:55

GoLang fsnotify 实现目录中日志文件大小监控

package main  

  
import (
  "log"
  "github.com/howeyc/fsnotify"
  "os"
  "fmt"
  "strconv"
  
)
  

  
func usage(){
  fmt.Println("")
  fmt.Printf("Usage: %s Montior-directory file-max-bytes-limit\n",os.Args)
  fmt.Println("For example:")
  fmt.Printf("%s /opt/logs 1024\n",os.Args)
  os.Exit(1)
  
}
  

  
func isDir(dirname string) bool{
  fhandler, err := os.Stat(dirname);
  if(! (err == nil || os.IsExist(err)) ) {
  return false
  }else {
  return fhandler.IsDir()
  }
  
}
  

  
func isFile(filename string) bool{
  fhandler, err := os.Stat(filename);
  if(! (err == nil || os.IsExist(err)) ) {
  return false
  }else if (fhandler.IsDir()){
  return false
  }
  return true
  
}
  

  
func emptiedFile(filename string) bool{
  FN,err := os.Create(filename)
  defer FN.Close()
  if err != nil {
  return false
  }
  fmt.Fprint(FN,"")
  return true
  
}
  

  
func getFileByteSize(filename string) (bool,int64) {
  if (! isFile(filename)) {
  return false,0
  }
  fhandler, _ := os.Stat(filename);
  return true,fhandler.Size()
  
}
  

  
func main() {
  var maxByte int64 = 1024*1024
  if (len(os.Args) < 2) {
  usage()
  }
  if (len(os.Args) >= 3) {
  maxByte_,err := strconv.Atoi(os.Args)
  if err != nil {
  log.SetPrefix(" ")
  log.Println(os.Args,"Is not a legitimate int number")
  usage()
  }
  maxByte = int64(maxByte_)
  }
  dirpath := os.Args
  if (!isDir(dirpath)){
  log.SetPrefix(" ")
  log.Println(dirpath,"Is not a legitimate directory")
  usage()
  }
  watcher, err := fsnotify.NewWatcher()
  if err != nil {
  log.Fatal(err)
  }
  done := make(chan bool)
  

  //Process event
  go func() {
  for {
  select {
  case ev := = maxByte){
  if ( ! emptiedFile(ev.Name) ) {
  log.SetPrefix(" ")
  log.Printf("%s :Can not empty file\n",ev.Name)
  }
  }
  }
  case err :=
页: [1]
查看完整版本: GoLang fsnotify 实现目录中日志文件大小监控