Adding tests for PanicLevel behavior, plus changing behavior!  :scream_cat:
diff --git a/entry.go b/entry.go
index 80638f3..e164eec 100644
--- a/entry.go
+++ b/entry.go
@@ -71,8 +71,6 @@
 }
 
 func (entry *Entry) log(level Level, msg string) {
-	var panicBuf bytes.Buffer
-
 	entry.Time = time.Now()
 	entry.Level = level
 	entry.Message = msg
@@ -93,7 +91,7 @@
 	entry.Logger.mu.Lock()
 	defer entry.Logger.mu.Unlock()
 
-	_, err = io.Copy(io.MultiWriter(entry.Logger.Out, &panicBuf), reader)
+	_, err = io.Copy(entry.Logger.Out, reader)
 	if err != nil {
 		fmt.Fprintf(os.Stderr, "Failed to write to log, %v\n", err)
 	}
@@ -102,7 +100,7 @@
 	// panic() to use in Entry#Panic(), we avoid the allocation by checking
 	// directly here.
 	if level <= PanicLevel {
-		panic(panicBuf.String())
+		panic(entry)
 	}
 }
 
diff --git a/entry_test.go b/entry_test.go
new file mode 100644
index 0000000..2ad192e
--- /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.Fatal()
+		}
+	}()
+
+	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.Fatal()
+		}
+	}()
+
+	logger := New()
+	logger.Out = &bytes.Buffer{}
+	entry := NewEntry(logger)
+	entry.WithField("err", errBoom).Panicf("kaboom %v", true)
+}