event: normalize the keys used by all the logging adapters
Change-Id: I1f843784fa5c7871fcf0b66f90da6ce18e8130c6
Reviewed-on: https://go-review.googlesource.com/c/exp/+/325574
Trust: Ian Cottrell <iancottrell@google.com>
Run-TryBot: Ian Cottrell <iancottrell@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Jonathan Amsterdam <jba@google.com>
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")
-)