Merge pull request #215 from underarmour/sentry-hook-with-client
Allow sentry hook to be created using an initialized raven client
diff --git a/hooks/sentry/README.md b/hooks/sentry/README.md
index 8b1f9a1..31de654 100644
--- a/hooks/sentry/README.md
+++ b/hooks/sentry/README.md
@@ -46,6 +46,39 @@
```
+If you wish to initialize a SentryHook with an already initialized raven client, you can use
+the `NewWithClientSentryHook` constructor:
+
+```go
+import (
+ "github.com/Sirupsen/logrus"
+ "github.com/Sirupsen/logrus/hooks/sentry"
+ "github.com/getsentry/raven-go"
+)
+
+func main() {
+ log := logrus.New()
+
+ client, err := raven.New(YOUR_DSN)
+ if err != nil {
+ log.Fatal(err)
+ }
+
+ hook, err := logrus_sentry.NewWithClientSentryHook(client, []logrus.Level{
+ logrus.PanicLevel,
+ logrus.FatalLevel,
+ logrus.ErrorLevel,
+ })
+
+ if err == nil {
+ log.Hooks.Add(hook)
+ }
+}
+
+hook, err := NewWithClientSentryHook(client, []logrus.Level{
+ logrus.ErrorLevel,
+})
+```
## Special fields
diff --git a/hooks/sentry/sentry.go b/hooks/sentry/sentry.go
index 4d184b2..cf88098 100644
--- a/hooks/sentry/sentry.go
+++ b/hooks/sentry/sentry.go
@@ -86,6 +86,12 @@
return &SentryHook{100 * time.Millisecond, client, levels}, nil
}
+// NewWithClientSentryHook creates a hook using an initialized raven client.
+// This method sets the timeout to 100 milliseconds.
+func NewWithClientSentryHook(client *raven.Client, levels []logrus.Level) (*SentryHook, error) {
+ return &SentryHook{100 * time.Millisecond, client, levels}, nil
+}
+
// Called when an event should be sent to sentry
// Special fields that sentry uses to give more information to the server
// are extracted from entry.Data (if they are found)
diff --git a/hooks/sentry/sentry_test.go b/hooks/sentry/sentry_test.go
index 5f59f69..4a97bc6 100644
--- a/hooks/sentry/sentry_test.go
+++ b/hooks/sentry/sentry_test.go
@@ -100,6 +100,28 @@
})
}
+func TestSentryWithClient(t *testing.T) {
+ WithTestDSN(t, func(dsn string, pch <-chan *raven.Packet) {
+ logger := getTestLogger()
+
+ client, _ := raven.New(dsn)
+
+ hook, err := NewWithClientSentryHook(client, []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)
+ }
+ })
+}
+
func TestSentryTags(t *testing.T) {
WithTestDSN(t, func(dsn string, pch <-chan *raven.Packet) {
logger := getTestLogger()