This package contains shared logic for Go-based structured logging.
This package uses the zap logging package under the hood. See its
README for more details on the logging API.
Add to your main.go:
import logger "github.com/blendle/go-logger"
func main() {
logger := logger.Must(logger.New("my-service", "cf89f839"))
}Then use it throughout your application:
logger.Warn("Something happened!")You can also provide custom Zap options on initialization, if you need it:
sampler := zap.WrapCore(func(core zapcore.Core) zapcore.Core {
return zapcore.NewSampler(core, time.Second, 100, 100)
})
fields := zap.Fields(zap.String("alwaysAdd", "this"))
logger := logger.Must(logger.New("my-service", "cf89f839", sampler, fields))You can optionally add Stackdriver specific fields to your logs. These can be used by Stackdriver to improve log readability/grouping.
import zapdriver "github.com/blendle/zapdriver"logger.Info("Hello", zapdriver.Label("hello", "world"))See here for all available Stackdriver fields.
You can send the USR1 signal to your application to switch the log level
between the default INFO and DEBUG level on runtime.
This allows you to capture debug logs during anomalies and find the problem.
You can also set the DEBUG environment variable to true to have the
application launch with the default log level set to DEBUG instead of INFO.
Again, you can send USR1 to toggle back to INFO as well.
This package contains a public testing API you can use if you need to assert a log entry exists.
// TestNew calls New, but returns both the logger, and an observer that can be
// used to fetch and compare delivered logs.
TestNew(tb testing.TB, options ...zap.Option) (*zap.Logger, *observer.ObservedLogs)// TestNewWithLevel is equal to TestNew, except that it takes an extra argument,
// dictating the minimum log level required to record an entry in the recorder.
TestNewWithLevel(tb testing.TB, level zapcore.LevelEnabler, options ...zap.Option) (*zap.Logger, *observer.ObservedLogs)see testing.go for more details.