64 lines
1.3 KiB
Go
64 lines
1.3 KiB
Go
// 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)
|
|
}
|
|
}
|
|
}
|