You've already forked opentelemetry-go
mirror of
https://github.com/open-telemetry/opentelemetry-go.git
synced 2026-06-03 18:35:08 +02:00
sdk/log: ObservedTimestamp should be set (#5091)
* Set ObservedTimestamp * Update sdk/log/logger.go Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com> * Reuse value --------- Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
This commit is contained in:
@@ -5,6 +5,7 @@ package log // import "go.opentelemetry.io/otel/sdk/log"
|
||||
|
||||
import (
|
||||
"context"
|
||||
"time"
|
||||
|
||||
"go.opentelemetry.io/otel"
|
||||
"go.opentelemetry.io/otel/log"
|
||||
@@ -13,6 +14,8 @@ import (
|
||||
"go.opentelemetry.io/otel/trace"
|
||||
)
|
||||
|
||||
var now = time.Now
|
||||
|
||||
// Compile-time check logger implements log.Logger.
|
||||
var _ log.Logger = (*logger)(nil)
|
||||
|
||||
@@ -68,6 +71,12 @@ func (l *logger) newRecord(ctx context.Context, r log.Record) Record {
|
||||
attributeValueLengthLimit: l.provider.attributeValueLengthLimit,
|
||||
attributeCountLimit: l.provider.attributeCountLimit,
|
||||
}
|
||||
|
||||
// This field SHOULD be set once the event is observed by OpenTelemetry.
|
||||
if newRecord.observedTimestamp.IsZero() {
|
||||
newRecord.observedTimestamp = now()
|
||||
}
|
||||
|
||||
r.WalkAttributes(func(kv log.KeyValue) bool {
|
||||
newRecord.AddAttributes(kv)
|
||||
return true
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
package log // import "go.opentelemetry.io/otel/sdk/log"
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
@@ -18,6 +19,16 @@ import (
|
||||
)
|
||||
|
||||
func TestLoggerEmit(t *testing.T) {
|
||||
nowDate := time.Date(2010, time.January, 1, 0, 0, 0, 0, time.UTC)
|
||||
|
||||
nowSwap := now
|
||||
t.Cleanup(func() {
|
||||
now = nowSwap
|
||||
})
|
||||
now = func() time.Time {
|
||||
return nowDate
|
||||
}
|
||||
|
||||
p0, p1, p2WithError := newProcessor("0"), newProcessor("1"), newProcessor("2")
|
||||
p2WithError.Err = errors.New("error")
|
||||
|
||||
@@ -32,6 +43,9 @@ func TestLoggerEmit(t *testing.T) {
|
||||
)
|
||||
r.SetObservedTimestamp(time.Date(2001, time.January, 1, 0, 0, 0, 0, time.UTC))
|
||||
|
||||
rWithNoObservedTimestamp := r
|
||||
rWithNoObservedTimestamp.SetObservedTimestamp(time.Time{})
|
||||
|
||||
contextWithSpanContext := trace.ContextWithSpanContext(context.Background(), trace.NewSpanContext(trace.SpanContextConfig{
|
||||
TraceID: trace.TraceID{0o1},
|
||||
SpanID: trace.SpanID{0o2},
|
||||
@@ -154,6 +168,36 @@ func TestLoggerEmit(t *testing.T) {
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "NoObservedTimestamp",
|
||||
logger: newLogger(NewLoggerProvider(
|
||||
WithProcessor(p0),
|
||||
WithProcessor(p1),
|
||||
WithAttributeValueLengthLimit(3),
|
||||
WithAttributeCountLimit(2),
|
||||
WithResource(resource.NewSchemaless(attribute.String("key", "value"))),
|
||||
), instrumentation.Scope{Name: "scope"}),
|
||||
ctx: context.Background(),
|
||||
record: rWithNoObservedTimestamp,
|
||||
expectedRecords: []Record{
|
||||
{
|
||||
timestamp: rWithNoObservedTimestamp.Timestamp(),
|
||||
body: rWithNoObservedTimestamp.Body(),
|
||||
severity: rWithNoObservedTimestamp.Severity(),
|
||||
severityText: rWithNoObservedTimestamp.SeverityText(),
|
||||
observedTimestamp: nowDate,
|
||||
resource: resource.NewSchemaless(attribute.String("key", "value")),
|
||||
attributeValueLengthLimit: 3,
|
||||
attributeCountLimit: 2,
|
||||
scope: &instrumentation.Scope{Name: "scope"},
|
||||
front: [attributesInlineCount]log.KeyValue{
|
||||
log.String("k1", "str"),
|
||||
log.Float64("k2", 1.0),
|
||||
},
|
||||
nFront: 2,
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
for _, tc := range testCases {
|
||||
|
||||
Reference in New Issue
Block a user