various fixes
diff --git a/hooks/sentry/README.md b/hooks/sentry/README.md
index bf0e950..ba64ed4 100644
--- a/hooks/sentry/README.md
+++ b/hooks/sentry/README.md
@@ -1,12 +1,15 @@
# Sentry Hook for Logrus <img src="http://i.imgur.com/hTeVwmJ.png" width="40" height="40" alt=":walrus:" class="emoji" title=":walrus:" />
-[Sentry](https://getsentry.com) provides both self-hosted and hostes solutions for exception tracking.
-Both client and server are [open source](https://github.com/getsentry/sentry).
+[Sentry](https://getsentry.com) provides both self-hosted and hosted
+solutions for exception tracking.
+Both client and server are
+[open source](https://github.com/getsentry/sentry).
## Usage
-Every sentry application defined on the server gets a different [DNS](https://www.getsentry.com/docs/). In the example below replace `YOUR_DSN` with the one created for your application.
-
+Every sentry application defined on the server gets a different
+[DSN](https://www.getsentry.com/docs/). In the example below replace
+`YOUR_DSN` with the one created for your application.
```go
import (
@@ -27,3 +30,13 @@
}
}
```
+
+## Special fields
+
+Some logrus fields have a special meaning in this hook,
+these are server_name and logger.
+When logs are sent to sentry these fields are treated differently.
+- server_name (also known as hostname) is the name of the server which
+is logging the event (hostname.example.com)
+- logger is the part of the application which is logging the event.
+In go this usually means setting it to the name of the package.
diff --git a/hooks/sentry/sentry.go b/hooks/sentry/sentry.go
index 74e8bbe..392601e 100644
--- a/hooks/sentry/sentry.go
+++ b/hooks/sentry/sentry.go
@@ -35,21 +35,18 @@
// SentryHook delivers logs to a sentry server.
type SentryHook struct {
- // DSN for this application
- // Modifications to this field after the call to NewSentryHook have no effect
- DSN string
-
client *raven.Client
levels []logrus.Level
}
-// NewSentryHook creates a hook to be added to an instance of logger and initializes the raven client.
+// NewSentryHook creates a hook to be added to an instance of logger
+// and initializes the raven client.
func NewSentryHook(DSN string, levels []logrus.Level) (*SentryHook, error) {
client, err := raven.NewClient(DSN, nil)
if err != nil {
return nil, err
}
- return &SentryHook{DSN, client, levels}, nil
+ return &SentryHook{client, levels}, nil
}
// Called when an event should be sent to sentry
@@ -74,8 +71,8 @@
}
packet.Extra = map[string]interface{}(d)
- _, errCh := hook.client.Capture(packet, nil)
- return <-errCh
+ hook.client.Capture(packet, nil)
+ return nil
}
// Levels returns the available logging levels.
diff --git a/hooks/sentry/sentry_test.go b/hooks/sentry/sentry_test.go
index 747d75f..45f18d1 100644
--- a/hooks/sentry/sentry_test.go
+++ b/hooks/sentry/sentry_test.go
@@ -25,7 +25,7 @@
return l
}
-func getTestDSN(t *testing.T) (string, <-chan *raven.Packet, func()) {
+func WithTestDSN(t *testing.T, tf func(string, <-chan *raven.Packet)) {
pch := make(chan *raven.Packet, 1)
s := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) {
defer req.Body.Close()
@@ -38,56 +38,60 @@
pch <- p
}))
+ defer s.Close()
fragments := strings.SplitN(s.URL, "://", 2)
- dsn := "%s://public:secret@%s/sentry/project-id"
-
- return fmt.Sprintf(dsn, fragments[0], fragments[1]), pch, s.Close
+ dsn := fmt.Sprintf(
+ "%s://public:secret@%s/sentry/project-id",
+ fragments[0],
+ fragments[1],
+ )
+ tf(dsn, pch)
}
func TestSpecialFields(t *testing.T) {
- logger := getTestLogger()
- dsn, pch, closeFn := getTestDSN(t)
- defer closeFn()
+ WithTestDSN(t, func(dsn string, pch <-chan *raven.Packet) {
+ logger := getTestLogger()
- hook, err := NewSentryHook(dsn, []logrus.Level{
- logrus.ErrorLevel,
+ hook, err := NewSentryHook(dsn, []logrus.Level{
+ logrus.ErrorLevel,
+ })
+
+ if err != nil {
+ t.Fatal(err.Error())
+ }
+ logger.Hooks.Add(hook)
+ logger.WithFields(logrus.Fields{
+ "server_name": server_name,
+ "logger": logger_name,
+ }).Error(message)
+
+ packet := <-pch
+ if packet.Logger != logger_name {
+ t.Errorf("logger should have been %s, was %s", logger_name, packet.Logger)
+ }
+
+ if packet.ServerName != server_name {
+ t.Errorf("server_name should have been %s, was %s", server_name, packet.ServerName)
+ }
})
-
- if err != nil {
- t.Fatal(err.Error())
- }
- logger.Hooks.Add(hook)
- logger.WithFields(logrus.Fields{
- "server_name": server_name,
- "logger": logger_name,
- }).Error(message)
-
- packet := <-pch
- if packet.Logger != logger_name {
- t.Errorf("logger should have been %s, was %s", logger_name, packet.Logger)
- }
-
- if packet.ServerName != server_name {
- t.Errorf("server_name should have been %s, was %s", server_name, packet.ServerName)
- }
}
func TestSentryHandler(t *testing.T) {
- logger := getTestLogger()
- dsn, pch, closeFn := getTestDSN(t)
- defer closeFn()
- hook, err := NewSentryHook(dsn, []logrus.Level{
- logrus.ErrorLevel,
- })
- if err != nil {
- t.Fatal(err.Error())
- }
- logger.Hooks.Add(hook)
+ WithTestDSN(t, func(dsn string, pch <-chan *raven.Packet) {
+ logger := getTestLogger()
+ hook, err := NewSentryHook(dsn, []logrus.Level{
+ logrus.ErrorLevel,
+ })
+ if err != nil {
+ t.Fatal(err.Error())
+ }
+ logger.Hooks.Add(hook)
- logger.Error(message)
- packet := <-pch
- if packet.Message != message {
- t.Errorf("message should have been %s, was %s", message, packet.Message)
- }
+ logger.Error(message)
+ packet := <-pch
+ if packet.Message != message {
+ t.Errorf("message should have been %s, was %s", message, packet.Message)
+ }
+ })
}