Log is a logging interface for Go. That's it. Pass around the interface.
Users want to standardise logging. Sometimes libraries log. We leave the underlying logging implementation to the user while allowing libraries to log by simply expecting something that satisfies the Logger interface. This leaves the user free to pre-configure structure, output, etc.
The interface is minimalistic on purpose
type Logger interface {
Log(v ...interface{})
Logf(format string, v ...interface{})
}
Pre-configure a logger using WithFields
and pass it as an option to a library:
import (
"github.com/go-log/log/print"
"github.com/lib/foo"
"github.com/sirupsen/logrus"
)
logger := print.New(logrus.WithFields(logrus.Fields{
"library": "github.com/lib/foo",
}))
f := foo.New(logger)