
Package log15 provides an opinionated, simple toolkit for best-practice logging in Go (golang) that is both human and machine readable. It is modeled after the Go standard library's io and net/http packages and is an alternative to the standard library's log package.
Version 3 compiles with Go modules. It also provides some basic simplifications:
For performance, the Call property has been removed from a log15.Record.
The CallerStackHandler, CallerFuncHandler, and CallerFileHandler
have been removed (all three relied on the Call property).
The term subpackage has been removed (there are multiple better replacements
you can use now).
In most cases, however, it should be sufficient to just change your import path:
- import log "github.com/inconshreveable/log15"
+ import log "github.com/inconshreveable/log15/v3"
A lot has happened since log15 was released; you may find the log/slog package
in the standard library to be a better fit for your use case.
Development of the v3 branch happens in the v3 subdirectory.
We also added a compatibility layer, which allows existing code to use the v3 library, so you can incrementally migrate.
import compat "github.com/inconshreveable/log15/compat"
compat.CompatHandler takes a v3 Handler, and returns a legacy log15 Handler.compat.CompatLogger does the same with the Logger type.The API of the master branch of log15 should always be considered unstable. If you want to rely on a stable API, you must vendor the library.
import log "github.com/inconshreveable/log15"
// all loggers can have key/value context
srvlog := log.New("module", "app/server")
// all log messages can have key/value context
srvlog.Warn("abnormal conn rate", "rate", curRate, "low", lowRate, "high", highRate)
// child loggers with inherited context
connlog := srvlog.New("raddr", c.RemoteAddr())
connlog.Info("connection open")
// lazy evaluation
connlog.Debug("ping remote", "latency", log.Lazy{pingRemote})
// flexible configuration
srvlog.SetHandler(log.MultiHandler(
log.StreamHandler(os.Stderr, log.LogfmtFormat()),
log.LvlFilterHandler(
log.LvlError,
log.Must.FileHandler("errors.json", log.JsonFormat()))))
Will result in output that looks like this:
WARN[06-17|21:58:10] abnormal conn rate module=app/server rate=0.500 low=0.100 high=0.800
INFO[06-17|21:58:10] connection open module=app/server raddr=10.0.0.1
The following commits broke API stability. This reference is intended to help you understand the consequences of updating to a newer version of log15.
Get() method to the Logger interface to retrieve the current handlerRecord field Call changed to stack.Call with switch to github.com/go-stack/stacksyslog.Priority argument to the SyslogXxx handler constructorsYes. Use log.Ctx:
srvlog := log.New(log.Ctx{"module": "app/server"})
srvlog.Warn("abnormal conn rate", log.Ctx{"rate": curRate, "low": lowRate, "high": highRate})
go get -u github.com/kevinburke/write_mailmap
write_mailmap > CONTRIBUTORS
Apache
$ claude mcp add log15 \
-- python -m otcore.mcp_server <graph>