diff --git a/event/common.go b/event/common.go
index 2d58a94..e9c9704 100644
--- a/event/common.go
+++ b/event/common.go
@@ -10,11 +10,13 @@
 const End = tagKey("end")
 const MetricKey = valueKey("metric")
 const MetricVal = valueKey("metricValue")
+const Error = errorKey("error")
 
 type stringKey string
 type traceKey string
 type tagKey string
 type valueKey string
+type errorKey string
 
 // Of creates a new message Label.
 func (k stringKey) Of(msg string) Label {
@@ -84,3 +86,22 @@
 	}
 	return Value{}, false
 }
+
+// Of creates a new error Label.
+func (k errorKey) Of(err error) Label {
+	return Label{Name: string(k), Value: ValueOf(err)}
+}
+
+func (k errorKey) Matches(ev *Event) bool {
+	_, found := k.Find(ev)
+	return found
+}
+
+func (k errorKey) Find(ev *Event) (error, bool) {
+	for i := len(ev.Labels) - 1; i >= 0; i-- {
+		if ev.Labels[i].Name == string(k) {
+			return ev.Labels[i].Value.Interface().(error), true
+		}
+	}
+	return nil, false
+}
diff --git a/event/logging/elogr/logr.go b/event/logging/elogr/logr.go
index ba3b405..5f45216 100644
--- a/event/logging/elogr/logr.go
+++ b/event/logging/elogr/logr.go
@@ -11,7 +11,7 @@
 	"github.com/go-logr/logr"
 	"golang.org/x/exp/event"
 	"golang.org/x/exp/event/keys"
-	"golang.org/x/exp/event/logging/internal"
+	"golang.org/x/exp/event/severity"
 )
 
 type logger struct {
@@ -89,12 +89,12 @@
 // while the err field should be used to attach the actual error that
 // triggered this log line, if present.
 func (l *logger) Error(err error, msg string, keysAndValues ...interface{}) {
-	l.log(msg, l.builder.Clone().With(internal.ErrorKey.Of(err)), keysAndValues)
+	l.log(msg, l.builder.Clone().With(event.Error.Of(err)), keysAndValues)
 }
 
 func (l *logger) log(msg string, b event.Builder, keysAndValues []interface{}) {
-	b.With(internal.LevelKey.Of(l.verbosity)) // TODO: Convert verbosity to level.
-	b.With(internal.NameKey.Of(l.name))
+	b.With(convertVerbosity(l.verbosity))
+	b.With(event.Name.Of(l.name))
 	addLabels(b, keysAndValues)
 	b.Log(msg)
 }
@@ -111,3 +111,7 @@
 func newLabel(key, value interface{}) event.Label {
 	return keys.Value(key.(string)).Of(value)
 }
+
+func convertVerbosity(v int) event.Label {
+	return severity.Of(severity.Level(v))
+}
diff --git a/event/logging/elogr/logr_test.go b/event/logging/elogr/logr_test.go
index 8b1faf2..f4b00d2 100644
--- a/event/logging/elogr/logr_test.go
+++ b/event/logging/elogr/logr_test.go
@@ -14,19 +14,19 @@
 	"golang.org/x/exp/event/adapter/eventtest"
 	"golang.org/x/exp/event/keys"
 	"golang.org/x/exp/event/logging/elogr"
-	"golang.org/x/exp/event/logging/internal"
+	"golang.org/x/exp/event/severity"
 )
 
 func TestInfo(t *testing.T) {
 	ctx, th := eventtest.NewCapture()
-	log := elogr.NewLogger(ctx, "/").WithName("n").V(3)
+	log := elogr.NewLogger(ctx, "/").WithName("n").V(int(severity.DebugLevel))
 	log = log.WithName("m")
 	log.Info("mess", "traceID", 17, "resource", "R")
 	want := []event.Event{{
 		At: eventtest.InitialTime,
 		Labels: []event.Label{
-			internal.LevelKey.Of(3),
-			internal.NameKey.Of("n/m"),
+			severity.Debug,
+			event.Name.Of("n/m"),
 			keys.Value("traceID").Of(17),
 			keys.Value("resource").Of("R"),
 			event.Message.Of("mess"),
diff --git a/event/logging/elogrus/logrus.go b/event/logging/elogrus/logrus.go
index 1f563e9..0fc9567 100644
--- a/event/logging/elogrus/logrus.go
+++ b/event/logging/elogrus/logrus.go
@@ -22,7 +22,7 @@
 	"github.com/sirupsen/logrus"
 	"golang.org/x/exp/event"
 	"golang.org/x/exp/event/keys"
-	"golang.org/x/exp/event/logging/internal"
+	"golang.org/x/exp/event/severity"
 )
 
 type formatter struct{}
@@ -47,10 +47,31 @@
 		ctx = context.Background()
 	}
 	b := event.To(ctx).At(e.Time)
-	b.With(internal.LevelKey.Of(int(e.Level))) // TODO: convert level
+	b.With(convertLevel(e.Level))
 	for k, v := range e.Data {
 		b.With(keys.Value(k).Of(v))
 	}
 	b.Log(e.Message)
 	return nil, nil
 }
+
+func convertLevel(level logrus.Level) event.Label {
+	switch level {
+	case logrus.PanicLevel:
+		return severity.Of(severity.FatalLevel + 1)
+	case logrus.FatalLevel:
+		return severity.Fatal
+	case logrus.ErrorLevel:
+		return severity.Error
+	case logrus.WarnLevel:
+		return severity.Warning
+	case logrus.InfoLevel:
+		return severity.Info
+	case logrus.DebugLevel:
+		return severity.Debug
+	case logrus.TraceLevel:
+		return severity.Trace
+	default:
+		return severity.Trace
+	}
+}
diff --git a/event/logging/elogrus/logrus_test.go b/event/logging/elogrus/logrus_test.go
index ccee07c..b0044d3 100644
--- a/event/logging/elogrus/logrus_test.go
+++ b/event/logging/elogrus/logrus_test.go
@@ -17,7 +17,7 @@
 	"golang.org/x/exp/event/adapter/eventtest"
 	"golang.org/x/exp/event/keys"
 	"golang.org/x/exp/event/logging/elogrus"
-	"golang.org/x/exp/event/logging/internal"
+	"golang.org/x/exp/event/severity"
 )
 
 func Test(t *testing.T) {
@@ -30,7 +30,7 @@
 
 	want := []event.Event{{
 		Labels: []event.Label{
-			internal.LevelKey.Of(4),
+			severity.Info,
 			keys.Value("traceID").Of(17),
 			keys.Value("resource").Of("R"),
 			event.Message.Of("mess"),
diff --git a/event/logging/ezap/zap.go b/event/logging/ezap/zap.go
index a19f8c5..1e8774b 100644
--- a/event/logging/ezap/zap.go
+++ b/event/logging/ezap/zap.go
@@ -23,7 +23,7 @@
 	"go.uber.org/zap/zapcore"
 	"golang.org/x/exp/event"
 	"golang.org/x/exp/event/keys"
-	"golang.org/x/exp/event/logging/internal"
+	"golang.org/x/exp/event/severity"
 )
 
 type core struct {
@@ -52,8 +52,8 @@
 func (c *core) Write(e zapcore.Entry, fs []zapcore.Field) error {
 	b := c.builder.Clone().
 		At(e.Time).
-		With(internal.LevelKey.Of(int(e.Level))). // TODO: convert zap level to general level
-		With(internal.NameKey.Of(e.LoggerName))
+		With(convertLevel(e.Level)).
+		With(event.Name.Of(e.LoggerName))
 	// TODO: add these additional labels more efficiently.
 	if e.Stack != "" {
 		b.With(keys.String("stack").Of(e.Stack))
@@ -148,3 +148,24 @@
 
 	return stringer.(fmt.Stringer).String()
 }
+
+func convertLevel(level zapcore.Level) event.Label {
+	switch level {
+	case zapcore.DebugLevel:
+		return severity.Debug
+	case zapcore.InfoLevel:
+		return severity.Info
+	case zapcore.WarnLevel:
+		return severity.Warning
+	case zapcore.ErrorLevel:
+		return severity.Error
+	case zapcore.DPanicLevel:
+		return severity.Of(severity.FatalLevel - 1)
+	case zapcore.PanicLevel:
+		return severity.Of(severity.FatalLevel + 1)
+	case zapcore.FatalLevel:
+		return severity.Fatal
+	default:
+		return severity.Trace
+	}
+}
diff --git a/event/logging/ezap/zap_test.go b/event/logging/ezap/zap_test.go
index a760cdd..0696e59 100644
--- a/event/logging/ezap/zap_test.go
+++ b/event/logging/ezap/zap_test.go
@@ -16,7 +16,7 @@
 	"golang.org/x/exp/event/adapter/eventtest"
 	"golang.org/x/exp/event/keys"
 	"golang.org/x/exp/event/logging/ezap"
-	"golang.org/x/exp/event/logging/internal"
+	"golang.org/x/exp/event/severity"
 )
 
 func Test(t *testing.T) {
@@ -28,8 +28,8 @@
 		Labels: []event.Label{
 			keys.Int64("traceID").Of(17),
 			keys.String("resource").Of("R"),
-			internal.LevelKey.Of(0),
-			internal.NameKey.Of("n/m"),
+			severity.Info,
+			event.Name.Of("n/m"),
 			keys.Float64("pi").Of(3.14),
 			event.Message.Of("mess"),
 		},
diff --git a/event/logging/internal/internal.go b/event/logging/internal/internal.go
deleted file mode 100644
index c02a207..0000000
--- a/event/logging/internal/internal.go
+++ /dev/null
@@ -1,12 +0,0 @@
-package internal
-
-import (
-	"golang.org/x/exp/event/keys"
-)
-
-var (
-	// TODO: these should be in event/keys.
-	LevelKey = keys.Int("level")
-	NameKey  = keys.String("name")
-	ErrorKey = keys.Value("error")
-)
