12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- package main
- import (
- "log"
- "os"
- "path/filepath"
- "github.com/fsnotify/fsnotify"
- )
- const (
- maxSize = 500 * 1024 * 1024 // 500MB
- logDir = "/var/log"
- )
- func checkAndTruncate(filePath string) {
- fileInfo, err := os.Stat(filePath)
- if err != nil {
- log.Printf("获取文件信息失败 %s: %v", filePath, err)
- return
- }
- if fileInfo.Size() > maxSize {
- err := os.Truncate(filePath, 0)
- if err != nil {
- log.Printf("截断文件失败 %s: %v", filePath, err)
- } else {
- log.Printf("成功截断文件 %s", filePath)
- }
- }
- }
- func main() {
- // 初始检查所有文件
- files, err := os.ReadDir(logDir)
- if err != nil {
- log.Fatalf("读取日志目录失败: %v", err)
- }
- for _, file := range files {
- if file.IsDir() {
- continue
- }
- checkAndTruncate(filepath.Join(logDir, file.Name()))
- }
- // 创建文件监控
- watcher, err := fsnotify.NewWatcher()
- if err != nil {
- log.Fatalf("创建文件监控失败: %v", err)
- }
- defer watcher.Close()
- err = watcher.Add(logDir)
- if err != nil {
- log.Fatalf("添加监控目录失败: %v", err)
- }
- log.Println("开始监控日志目录", logDir)
- for {
- select {
- case event := <-watcher.Events:
- if event.Op&fsnotify.Write == fsnotify.Write {
- checkAndTruncate(event.Name)
- }
- case err := <-watcher.Errors:
- log.Printf("监控错误: %v", err)
- }
- }
- }
|