package logrus_caller import ( "bytes" "encoding/json" "fmt" "testing" "github.com/Sirupsen/logrus" ) func LogAndAssertJSON(t *testing.T, log func(*logrus.Logger), assertions func(fields logrus.Fields)) { var buffer bytes.Buffer var fields logrus.Fields logger := logrus.New() logger.Hooks.Add(&CallerHook{}) logger.Out = &buffer logger.Formatter = new(logrus.JSONFormatter) log(logger) err := json.Unmarshal(buffer.Bytes(), &fields) if err != nil { t.Error("Error unmarshaling log entry") } assertions(fields) } func TestCaller(t *testing.T) { LogAndAssertJSON(t, func(logger *logrus.Logger) { logger.Info("Hello World") }, func(fields logrus.Fields) { expected := "caller_test.go:33" if fields["caller"] != expected { t.Error(fmt.Sprintf("Caller was %s, expected %s", fields["caller"], expected)) } }) }