otelzap

package module
v0.1.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 30, 2023 License: Apache-2.0 Imports: 9 Imported by: 1

README

otelzap

Zap logger with OpenTelemetry support. This logger will export LogRecord's in OTLP format.

Quick start

Export env variable OTEL_EXPORTER_OTLP_ENDPOINT=https://localhost:4318 to your OTLP collector

package main

import (
	"context"
	"go.opentelemetry.io/otel"
	"go.opentelemetry.io/otel/sdk/resource"
	semconv "go.opentelemetry.io/otel/semconv/v1.20.0"
	semconv2 "go.opentelemetry.io/otel/semconv/v1.4.0"
	"go.uber.org/zap"
	"github.com/agoda-com/otelzap"
	otellogs "github.com/agoda-com/opentelemetry-logs-go"
	sdk "github.com/agoda-com/opentelemetry-logs-go/sdk/logs"
	"github.com/agoda-com/opentelemetry-logs-go/exporters/otlp/otlplogs"
	"github.com/agoda-com/opentelemetry-logs-go/exporters/otlp/otlplogs/otlplogshttp"
	"os"
)

// configure common attributes for all logs 
func newResource() *resource.Resource {
	hostName, _ := os.Hostname()
	return resource.NewWithAttributes(
		semconv.SchemaURL,
		semconv.ServiceName("otelzap-example"),
		semconv.ServiceVersion("1.0.0"),
		semconv.HostName(hostName),
	)
}

func main() {

	ctx := context.Background()

	// configure opentelemetry logger provider
	logExporter, _ := otlplogs.NewExporter(ctx)
	loggerProvider := sdk.NewLoggerProvider(
		sdk.WithBatcher(logExporter),
		sdk.WithResource(newResource()),
	)
	// gracefully shutdown logger to flush accumulated signals before program finish
	defer loggerProvider.Shutdown(ctx)

	// set opentelemetry logger provider globally 
	otellogs.SetLoggerProvider(loggerProvider)

	// create new  logger with opentelemetry zap core and set it globally
	logger := zap.New(otelzap.NewOtelCore(loggerProvider))
	zap.ReplaceGlobals(logger)

	// now your application ready to produce logs to opentelemetry collector
	doSomething()

}

func doSomething() {
	// start new span
	// see official trace documentation https://github.com/open-telemetry/opentelemetry-go
	tracer := otel.Tracer("my-tracer")
	spanCtx, span := tracer.Start(context.Background(), "My Span")
	defer func() {
		span.End()
	}()

	// send log with opentelemetry context
	otelzap.Ctx(spanCtx).Info("My message with trace context")
}

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func NewOtelCore

func NewOtelCore(loggerProvider otel.LoggerProvider) zapcore.Core

NewOtelCore creates new OpenTelemetry Core to export logs in OTLP format

func Version

func Version() string

Version is the current release version of OpenTelemetry Zap in use.

Types

type Logger

type Logger struct {
	*zap.Logger
}

Logger is a thin wrapper for zap.Logger that adds Ctx method.

func Ctx

func Ctx(ctx context.Context) *Logger

Ctx is a shortcut for L().Ctx(ctx).

func L

func L() *Logger

L returns the global Logger

func (*Logger) Ctx

func (l *Logger) Ctx(ctx context.Context) *Logger

func (*Logger) Sugar

func (l *Logger) Sugar() *SugaredLogger

func (*Logger) With

func (l *Logger) With(fields ...zapcore.Field) *Logger

type SugaredLogger

type SugaredLogger struct {
	*zap.SugaredLogger
}

func S

func S() *SugaredLogger

func (*SugaredLogger) Ctx

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL