You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

57 lines
1.2 KiB

3 years ago
package otel
import (
"context"
"gitoa.ru/go-4devs/log/entry"
"gitoa.ru/go-4devs/log/level"
"go.opentelemetry.io/otel/attribute"
"go.opentelemetry.io/otel/trace"
3 years ago
)
const (
fieldSeverityNumber = "SeverityNumber"
fieldSeverityText = "SeverityText"
levelFields = 2
)
func levels(lvl level.Level) Level {
switch lvl {
case level.Emergency:
return levelError3
case level.Alert:
return levelFatal
case level.Critical:
return levelError2
case level.Error:
return levelError
case level.Warning:
return levelWarn
case level.Notice:
return levelInfo2
case level.Info:
return levelInfo
case level.Debug:
return levelDebug
}
return 0
}
2 years ago
func addEvent(ctx context.Context, data *entry.Entry) {
3 years ago
span := trace.SpanFromContext(ctx)
2 years ago
attrs := make([]attribute.KeyValue, 0, data.Fields().Len()+levelFields)
3 years ago
2 years ago
lvl := levels(data.Level())
3 years ago
attrs = append(attrs,
attribute.String(fieldSeverityText, lvl.String()),
attribute.Int(fieldSeverityNumber, int(lvl)),
3 years ago
)
2 years ago
for _, field := range data.Fields() {
attrs = append(attrs, attribute.String(string(field.Key()), field.Value().String()))
3 years ago
}
2 years ago
span.AddEvent(data.Message(), trace.WithAttributes(attrs...))
3 years ago
}