//go:build !windows && !plan9 package main import ( "bufio" "flag" "fmt" "log" "log/syslog" "os" "strings" "time" ) func main() { var ip = flag.String("ip", "localhost:514", "ip:port") var cycle = flag.Int("cycle", 1000, "repeat number") var cycleSpan = flag.Int("sleep", 1, "sleep millisecond after one cycle") var span = flag.Int("span", 1, "sleep 1 millisecond every span row") var protocol = flag.String("protocol", "udp", "udp/tcp") var incTime = flag.Int("inctime", 1, "Increase seconds") flag.Parse() filePath := os.Args[ len(os.Args)-1 ] readFile, err := os.Open(filePath) if err != nil { log.Fatal(err) } fileScanner := bufio.NewScanner(readFile) fileScanner.Split(bufio.ScanLines) var fileLines []string for fileScanner.Scan() { fileLines = append(fileLines, fileScanner.Text()) } _ = readFile.Close() /*for _, line := range fileLines { fmt.Println(line) } fmt.Println(fileLines) */ sysLog, err := syslog.Dial(*protocol, *ip, syslog.LOG_WARNING|syslog.LOG_DAEMON, "demo") if err != nil { log.Fatal(err) } // 11-Jul-2023 16:00:01 DNS systemd: Started Session 1370 of user root. format := "02-Jan-2006 15:04:05" total := 0 loop := 0 for i:=0 ; i<*cycle ; i++ { incDuration := time.Second*time.Duration(i*(*incTime)) for k, line := range fileLines { if line != "" { fields := strings.Fields(line) if len(fields) > 2 { timeStr := fields[0] + " " + fields[1] line = strings.Join(fields[2:], " ") t, err := time.Parse(format, timeStr) if err != nil { log.Fatal(err) } t = t.Add(incDuration) line = t.Format(format) + " " + line } } if err = sysLog.Emerg(line); err != nil { log.Fatal(err) } if *span > 0 && (k % *span == 0) { time.Sleep(time.Duration(*span) * time.Millisecond) } total++ } loop++ fmt.Printf("send %d , total %d row .\n", loop, total) if *cycleSpan > 0 { time.Sleep(time.Duration(*cycleSpan) * time.Millisecond) } } }