Skip to content


Subversion checkout URL

You can clone with
Download ZIP
branch: master


Commenting out information that we've had three reports of not actually working.  No info about this project, but want to make sure it's not reused for now.
latest commit 0c8581caea
@erikjasiak erikjasiak authored
Failed to load latest commit information.
gosteno-prettify fix gosteno package name in gosteno-prettify
syslog Better error message when syslog setup fails
.gitignore Rename package to gosteno
.travis.yml add .travis.yml
LICENSE Add license file Update
codec.go Rename package to gosteno
config.go Rename package to gosteno
config_test.go Rename package to gosteno
io_sink.go Rename package to gosteno
io_sink_test.go Rename package to gosteno
json_codec.go Rename package to gosteno
json_codec_test.go Rename package to gosteno
json_prettifier.go Rename package to gosteno
json_prettifier_test.go Rename package to gosteno
log_level.go Rename package to gosteno
log_level_test.go Rename package to gosteno
logger.go Rename package to gosteno
logger_test.go make thread-safe
null_sink_test.go Rename package to gosteno
perf_test.go Rename package to gosteno
record.go make thread-safe
record_test.go Rename package to gosteno
regexp.go make thread-safe
sink.go Rename package to gosteno
steno.go fix config initialization
steno_test.go make thread-safe
syslog_sink.go Better error message when syslog setup fails
syslog_sink_test.go Remove syslog from windows builds
testing_sink.go make thread-safe
testing_sink_test.go make thread-safe

Gosteno Build Status

Gosteno is a golang implementation of the steno log tool. The feature set of Gosteno is very similar with that of ruby steno.


Core concepts behind Gosteno includes codec, sink, level, tag.


A codec encodes log entries to structural data, more specifically, JSON format data. Besides JSON codecs, Gosteno provides prettified codec which generates more human-readable data.


Roughly speaking, a sink is the destination where you store your log data. It's an abstraction of the underlying data storage systems. Currently Gosteno supports two kinds of sinks, namely IOSink and SyslogSink. IOSink includes files and standard output while SyslogSink streams your log data to syslog daemons such as rsyslogd. You can register as many sinks as you want. Everytime you log information, it will be written to all the sinks you have registered.


Gosteno supports 9 levels(from low to high): all, debug2, debug1, debug, info, warn, error, fatal, off. You can change the level on the fly without respawning the process.


In gosteno, tags are extended information that will be encoded together with other normal log information. You can add as many tags as you want. Tag makes the log information extensive.

Get Gosteno

go get -u

Getting started

Here is a short but complete program showing how to registering sinks, chosing codec, tagging the information.

package main

import (

func main() {
    c := &gosteno.Config{
        Sinks: []gosteno.Sink{
        Level:     gosteno.LOG_INFO,
        Codec:     gosteno.NewJsonCodec(),
        EnableLOC: true,
    logger := gosteno.NewLogger("test")
    t := gosteno.NewTaggedLogger(logger, map[string]string{"foo": "bar", "hello": "world"})

Supported platforms

Currently targeting modern flavors of darwin and linux.


Apache 2.0

Something went wrong with that request. Please try again.