123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- //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")
- var file = flag.String("file", "", "filenamesave for save")
- flag.Parse()
- var writer *bufio.Writer
- if *file != "" {
- // 创建输出文件
- outputFile, err := os.Create(*file)
- if err != nil {
- log.Fatal("无法创建输出文件:", err)
- }
- defer outputFile.Close()
- writer = bufio.NewWriter(outputFile)
- defer writer.Flush() // 确保所有缓冲数据写入磁盘
- }
- 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 *incTime != 0 && 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 *file == "" {
- if err = sysLog.Emerg(line); err != nil {
- log.Fatal(err)
- }
- } else {
- // 将行内容写入输出文件(包括换行符)
- _, err := writer.WriteString(line + "\n")
- if err != nil {
- log.Fatal("写入文件失败:", err)
- }
- // 每处理100行刷新一次缓冲区(可选)
- if total%10 == 0 {
- writer.Flush()
- }
- }
- 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)
- }
- }
- }
|