Skip to content

Commit

Permalink
stdoutlog: Add exporter (#5172)
Browse files Browse the repository at this point in the history
  • Loading branch information
XSAM authored Apr 11, 2024
1 parent fb02927 commit 7092c1f
Show file tree
Hide file tree
Showing 6 changed files with 491 additions and 4 deletions.
6 changes: 3 additions & 3 deletions exporters/stdout/stdoutlog/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@ import (
)

var (
defaultWriter = os.Stdout
defaultPrettyPrint = false
defaultTimestamps = true
defaultWriter io.Writer = os.Stdout
defaultPrettyPrint = false
defaultTimestamps = true
)

// config contains options for the STDOUT exporter.
Expand Down
72 changes: 72 additions & 0 deletions exporters/stdout/stdoutlog/exporter.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0

package stdoutlog // import "go.opentelemetry.io/otel/exporters/stdout/stdoutlog"

import (
"context"
"encoding/json"
"sync/atomic"

"go.opentelemetry.io/otel/sdk/log"
)

var _ log.Exporter = &Exporter{}

// Exporter writes JSON-encoded log records to an [io.Writer] ([os.Stdout] by default).
// Exporter must be created with [New].
type Exporter struct {
encoder atomic.Pointer[json.Encoder]
timestamps bool
}

// New creates an [Exporter].
func New(options ...Option) (*Exporter, error) {
cfg := newConfig(options)

enc := json.NewEncoder(cfg.Writer)
if cfg.PrettyPrint {
enc.SetIndent("", "\t")
}

e := Exporter{
timestamps: cfg.Timestamps,
}
e.encoder.Store(enc)

return &e, nil
}

// Export exports log records to writer.
func (e *Exporter) Export(ctx context.Context, records []log.Record) error {
enc := e.encoder.Load()
if enc == nil {
return nil
}

for _, record := range records {
// Honor context cancellation.
if err := ctx.Err(); err != nil {
return err
}

// Encode record, one by one.
recordJSON := e.newRecordJSON(record)
if err := enc.Encode(recordJSON); err != nil {
return err
}
}
return nil
}

// Shutdown shuts down the Exporter.
// Calls to Export will perform no operation after this is called.
func (e *Exporter) Shutdown(context.Context) error {
e.encoder.Store(nil)
return nil
}

// ForceFlush performs no action.
func (e *Exporter) ForceFlush(context.Context) error {
return nil
}
Loading

0 comments on commit 7092c1f

Please sign in to comment.