func TestWritingToUDP(t *testing.T) { port := 16661 udp.SetAddr(fmt.Sprintf(":%d", port)) hook, err := NewPapertrailHook("localhost", port, "test") if err != nil { t.Errorf("Unable to connect to local UDP server.") } log := logrus.New() log.Hooks.Add(hook) udp.ShouldReceive(t, "foo", func() { log.Info("foo") }) }
func TestLocalhostAddAndPrint(t *testing.T) { log := logrus.New() hook, err := NewSyslogHook("udp", "localhost:514", syslog.LOG_INFO, "") if err != nil { t.Errorf("Unable to connect to local syslog.") } log.Hooks.Add(hook) for _, level := range hook.Levels() { if len(log.Hooks[level]) != 1 { t.Errorf("SyslogHook was not added. The length of log.Hooks[%v]: %v", level, len(log.Hooks[level])) } } log.Info("Congratulations!") }
// TestLogEntryMessageReceived checks if invoking Logrus' log.Error // method causes an XML payload containing the log entry message is received // by a HTTP server emulating an Airbrake-compatible endpoint. func TestLogEntryMessageReceived(t *testing.T) { log := logrus.New() ts := startAirbrakeServer(t) defer ts.Close() hook := NewHook(ts.URL, testAPIKey, "production") log.Hooks.Add(hook) log.Error(expectedMsg) select { case received := <-noticeError: if received.Message != expectedMsg { t.Errorf("Unexpected message received: %s", received.Message) } case <-time.After(time.Second): t.Error("Timed out; no notice received by Airbrake API") } }
func TestNoticeReceived(t *testing.T) { msg := make(chan string, 1) expectedMsg := "foo" ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { var notice notice data, _ := ioutil.ReadAll(r.Body) if err := json.Unmarshal(data, ¬ice); err != nil { t.Error(err) } _ = r.Body.Close() msg <- notice.Events[0].Exceptions[0].Message })) defer ts.Close() hook := &bugsnagHook{} bugsnag.Configure(bugsnag.Configuration{ Endpoint: ts.URL, ReleaseStage: "production", APIKey: "12345678901234567890123456789012", Synchronous: true, }) log := logrus.New() log.Hooks.Add(hook) log.WithFields(logrus.Fields{ "error": errors.New(expectedMsg), }).Error("Bugsnag will not see this string") select { case received := <-msg: if received != expectedMsg { t.Errorf("Unexpected message received: %s", received) } case <-time.After(time.Second): t.Error("Timed out; no notice received by Bugsnag API") } }
// TestLogEntryMessageReceived confirms that, when passing an error type using // logrus.Fields, a HTTP server emulating an Airbrake endpoint receives the // error message returned by the Error() method on the error interface // rather than the logrus.Entry.Message string. func TestLogEntryWithErrorReceived(t *testing.T) { log := logrus.New() ts := startAirbrakeServer(t) defer ts.Close() hook := NewHook(ts.URL, testAPIKey, "production") log.Hooks.Add(hook) log.WithFields(logrus.Fields{ "error": &customErr{expectedMsg}, }).Error(unintendedMsg) select { case received := <-noticeError: if received.Message != expectedMsg { t.Errorf("Unexpected message received: %s", received.Message) } if received.Class != expectedClass { t.Errorf("Unexpected error class: %s", received.Class) } case <-time.After(time.Second): t.Error("Timed out; no notice received by Airbrake API") } }
package main import ( "github.com/gogap/logrus" "github.com/gogap/logrus/hooks/airbrake" ) var log = logrus.New() func init() { log.Formatter = new(logrus.TextFormatter) // default log.Hooks.Add(airbrake.NewHook("https://example.com", "xyz", "development")) } func main() { log.WithFields(logrus.Fields{ "animal": "walrus", "size": 10, }).Info("A group of walrus emerges from the ocean") log.WithFields(logrus.Fields{ "omg": true, "number": 122, }).Warn("The group's number increased tremendously!") log.WithFields(logrus.Fields{ "omg": true, "number": 100, }).Fatal("The ice breaks!") }
func getTestLogger() *logrus.Logger { l := logrus.New() l.Out = ioutil.Discard return l }