Latest commit ed7a299 May 17, 2013 @lethain lethain Merge pull request #3 from lethain/extrafields
Failed to load latest commit information.
gelf writer: remove debugging panic May 17, 2013
.gitignore build: gitignore Oct 31, 2012
LICENSE add license Oct 31, 2012
README.md doc: README: update todos May 17, 2013


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.


go-gelf is go get-able:

go get github.com/SocialCodeInc/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 (

func main() {
    var graylogAddr string

    flag.StringVar(&graylogAddr, "graylog", "", "graylog server addr")

    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


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