GELF is graylog2‘s UDP logging format. This library provides an API that applications can use to log messages directly to a graylog2 server, along with an io.Writer
that can be use to redirect the standard library’s log messages (or os.Stdout
), to a graylog2 server.
go-gelf is go get-able:
go get github.com/Graylog2/go-gelf/gelf
The easiest way to integrate graylog logging into your go app is by having your main
function (or even init
) call log.SetOutput()
. By using an io.MultiWriter
, we can log to both stdout and graylog - giving us both centralized and local logs. (Redundancy is nice).
package main import ( "flag" "github.com/Graylog2/go-gelf/gelf" "io" "log" "os" ) func main() { var graylogAddr string flag.StringVar(&graylogAddr, "graylog", "", "graylog server addr") flag.Parse() if graylogAddr != "" { gelfWriter, err := gelf.NewWriter(graylogAddr) if err != nil { log.Fatalf("gelf.NewWriter: %s", err) } // log to both stderr and graylog2 log.SetOutput(io.MultiWriter(os.Stderr, gelfWriter)) log.Printf("logging to stderr & graylog2@'%s'", graylogAddr) } // From here on out, any calls to log.Print* functions // will appear on stdout, and be sent over UDP to the // specified Graylog2 server. log.Printf("Hello gray World") // ... }
The above program can be invoked as:
go run test.go -graylog=localhost:12201
Because GELF messages are sent over UDP, graylog server availability doesn't impact application performance or response time. There is a small, fixed overhead per log call, regardless of whether the target server is reachable or not.
go-gelf is offered under the MIT license, see LICENSE for details.