Merge pull request #74 from gigaroby/sentry-hook
Added sentry hook
diff --git a/README.md b/README.md
index 01769c7..cabd027 100644
--- a/README.md
+++ b/README.md
@@ -206,11 +206,18 @@
log "github.com/Sirupsen/logrus"
"github.com/Sirupsen/logrus/hooks/airbrake"
"github.com/Sirupsen/logrus/hooks/syslog"
+ "log/syslog"
)
func init() {
log.AddHook(new(logrus_airbrake.AirbrakeHook))
- log.AddHook(logrus_syslog.NewSyslogHook("udp", "localhost:514", syslog.LOG_INFO, ""))
+
+ hook, err := logrus_syslog.NewSyslogHook("udp", "localhost:514", syslog.LOG_INFO, "")
+ if err != nil {
+ log.Error("Unable to connect to local syslog daemon")
+ } else {
+ log.AddHook(hook)
+ }
}
```
diff --git a/entry.go b/entry.go
index a77c4b0..e164eec 100644
--- a/entry.go
+++ b/entry.go
@@ -100,7 +100,7 @@
// panic() to use in Entry#Panic(), we avoid the allocation by checking
// directly here.
if level <= PanicLevel {
- panic(reader.String())
+ panic(entry)
}
}
diff --git a/entry_test.go b/entry_test.go
new file mode 100644
index 0000000..98717df
--- /dev/null
+++ b/entry_test.go
@@ -0,0 +1,53 @@
+package logrus
+
+import (
+ "bytes"
+ "fmt"
+ "testing"
+
+ "github.com/stretchr/testify/assert"
+)
+
+func TestEntryPanicln(t *testing.T) {
+ errBoom := fmt.Errorf("boom time")
+
+ defer func() {
+ p := recover()
+ assert.NotNil(t, p)
+
+ switch pVal := p.(type) {
+ case *Entry:
+ assert.Equal(t, "kaboom", pVal.Message)
+ assert.Equal(t, errBoom, pVal.Data["err"])
+ default:
+ t.Fatalf("want type *Entry, got %T: %#v", pVal, pVal)
+ }
+ }()
+
+ logger := New()
+ logger.Out = &bytes.Buffer{}
+ entry := NewEntry(logger)
+ entry.WithField("err", errBoom).Panicln("kaboom")
+}
+
+func TestEntryPanicf(t *testing.T) {
+ errBoom := fmt.Errorf("boom again")
+
+ defer func() {
+ p := recover()
+ assert.NotNil(t, p)
+
+ switch pVal := p.(type) {
+ case *Entry:
+ assert.Equal(t, "kaboom true", pVal.Message)
+ assert.Equal(t, errBoom, pVal.Data["err"])
+ default:
+ t.Fatalf("want type *Entry, got %T: %#v", pVal, pVal)
+ }
+ }()
+
+ logger := New()
+ logger.Out = &bytes.Buffer{}
+ entry := NewEntry(logger)
+ entry.WithField("err", errBoom).Panicf("kaboom %v", true)
+}
diff --git a/examples/basic/basic.go b/examples/basic/basic.go
index 3594550..a62ba45 100644
--- a/examples/basic/basic.go
+++ b/examples/basic/basic.go
@@ -12,6 +12,17 @@
}
func main() {
+ defer func() {
+ err := recover()
+ if err != nil {
+ log.WithFields(logrus.Fields{
+ "omg": true,
+ "err": err,
+ "number": 100,
+ }).Fatal("The ice breaks!")
+ }
+ }()
+
log.WithFields(logrus.Fields{
"animal": "walrus",
"size": 10,
@@ -23,7 +34,7 @@
}).Warn("The group's number increased tremendously!")
log.WithFields(logrus.Fields{
- "omg": true,
- "number": 100,
- }).Fatal("The ice breaks!")
+ "animal": "orca",
+ "size": 9009,
+ }).Panic("It's over 9000!")
}
diff --git a/exported.go b/exported.go
index 0e2d59f..d087124 100644
--- a/exported.go
+++ b/exported.go
@@ -30,6 +30,11 @@
std.Level = level
}
+// GetLevel returns the standard logger level.
+func GetLevel() Level {
+ return std.Level
+}
+
// AddHook adds a hook to the standard logger hooks.
func AddHook(hook Hook) {
std.mu.Lock()
diff --git a/hooks/papertrail/papertrail.go b/hooks/papertrail/papertrail.go
index 48e2fea..12c56f2 100644
--- a/hooks/papertrail/papertrail.go
+++ b/hooks/papertrail/papertrail.go
@@ -30,7 +30,7 @@
// Fire is called when a log event is fired.
func (hook *PapertrailHook) Fire(entry *logrus.Entry) error {
date := time.Now().Format(format)
- payload := fmt.Sprintf("<22> %s %s: [%s] %s", date, hook.AppName, entry.Data["level"], entry.Message)
+ payload := fmt.Sprintf("<22> %s %s: [%s] %s", date, hook.AppName, entry.Level, entry.Message)
bytesWritten, err := hook.UDPConn.Write([]byte(payload))
if err != nil {
diff --git a/hooks/syslog/syslog.go b/hooks/syslog/syslog.go
index 2a18ce6..b6fa374 100644
--- a/hooks/syslog/syslog.go
+++ b/hooks/syslog/syslog.go
@@ -29,18 +29,18 @@
return err
}
- switch entry.Data["level"] {
- case "panic":
+ switch entry.Level {
+ case logrus.PanicLevel:
return hook.Writer.Crit(line)
- case "fatal":
+ case logrus.FatalLevel:
return hook.Writer.Crit(line)
- case "error":
+ case logrus.ErrorLevel:
return hook.Writer.Err(line)
- case "warn":
+ case logrus.WarnLevel:
return hook.Writer.Warning(line)
- case "info":
+ case logrus.InfoLevel:
return hook.Writer.Info(line)
- case "debug":
+ case logrus.DebugLevel:
return hook.Writer.Debug(line)
default:
return nil