go-gelf - GELF library and writer for Go

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.

Installing

go-gelf is go get-able:

go get github.com/Graylog2/go-gelf/gelf

Usage

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.

To Do

  • WriteMessage example

License

go-gelf is offered under the MIT license, see LICENSE for details.