// Production build: go build -ldflags="-w" -o gelf-reader_release gelf-reader package main import ( "flag" "fmt" "io" "log" "os" "gopkg.in/Graylog2/go-gelf.v2/gelf" ) const ( VERSION = "0.1.2" ) func main() { var ( listenAddr string outputFile string showVersion bool outWriter io.Writer ) flag.StringVar(&listenAddr, "listen", "0.0.0.0:12201", "listen address") flag.StringVar(&outputFile, "output", "", "Output file (stdout if empty)") flag.BoolVar(&showVersion, "version", false, "Show version and exit") flag.Parse() fmt.Printf("GELF reader server %v\n", VERSION) if showVersion { return } if len(outputFile) > 0 { outFile, err := os.OpenFile(outputFile, os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0755) if err != nil { log.Fatalf("Error opening output file\n%s", err) } outWriter = outFile defer outFile.Close() } else { outWriter = os.Stdout } gelfReader, err := gelf.NewReader(listenAddr) if err != nil { log.Fatalf("Error creating GELF network reader\n%s", err) } fmt.Printf("Listening on %v\n", gelfReader.Addr()) for { msg, err := gelfReader.ReadMessage() if err != nil { log.Printf("Error reading message\n%s\n", err) } else { fmt.Fprintf(outWriter, "%f %v: %v\n", msg.TimeUnix, msg.Host, msg.Short) } } }