Skip to content

Instantly share code, notes, and snippets.

@teone
Created November 18, 2023 00:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save teone/245f6984013cc089b81a263360555011 to your computer and use it in GitHub Desktop.
Save teone/245f6984013cc089b81a263360555011 to your computer and use it in GitHub Desktop.
log-example
module github.com/teone/log-example
go 1.20
replace (
github.com/coreos/bbolt v1.3.4 => go.etcd.io/bbolt v1.3.4
go.etcd.io/bbolt v1.3.4 => github.com/coreos/bbolt v1.3.4
)
require github.com/opencord/voltha-lib-go/v7 v7.4.6
require (
github.com/opentracing/opentracing-go v1.2.0 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/uber/jaeger-client-go v2.29.1+incompatible // indirect
github.com/uber/jaeger-lib v2.4.1+incompatible // indirect
go.uber.org/atomic v1.7.0 // indirect
go.uber.org/multierr v1.6.0 // indirect
go.uber.org/zap v1.18.1 // indirect
)
package main
import (
"context"
"github.com/opencord/voltha-lib-go/v7/pkg/log"
"github.com/opentracing/opentracing-go"
"github.com/uber/jaeger-client-go"
"os"
)
var logger log.CLogger
type Config struct {
LogLevel log.LogLevel
LofFormat string
TraceEnabled bool
TraceAgentAddress string
LogCorrelationEnabled bool
}
func init() {
// Setup this package so that it's log level can be modified at run time
var err error
logger, err = log.RegisterPackage(log.CONSOLE, log.ErrorLevel, log.Fields{})
if err != nil {
panic(err)
}
}
func main() {
os.Setenv("COMPONENT_NAME", "test-component")
cf := Config{
LogLevel: log.DebugLevel,
LofFormat: log.CONSOLE,
TraceEnabled: false,
TraceAgentAddress: "",
LogCorrelationEnabled: true,
}
instanceID := "test-instance"
ctx := context.Background()
tracer, closer := jaeger.NewTracer("service", jaeger.NewConstSampler(true), jaeger.NewNullReporter())
defer closer.Close()
sp1 := tracer.StartSpan("package-main").(*jaeger.Span)
ctx = opentracing.ContextWithSpan(ctx, sp1)
//Setup default logger - applies for packages that do not have specific logger set
if _, err := log.SetDefaultLogger(cf.LofFormat, cf.LogLevel, log.Fields{"instanceId": instanceID}); err != nil {
logger.With(log.Fields{"error": err}).Fatal(ctx, "Cannot setup logging")
}
// Update all loggers (provisioned via init) with a common field
if err := log.UpdateAllLoggers(log.Fields{"instanceId": instanceID}); err != nil {
logger.With(log.Fields{"error": err}).Fatal(ctx, "Cannot setup logging")
}
// Update all loggers to log level specified as input parameter
log.SetAllLogLevel(cf.LogLevel)
// setup log correlation
closer, err := log.GetGlobalLFM().InitTracingAndLogCorrelation(cf.TraceEnabled, cf.TraceAgentAddress, cf.LogCorrelationEnabled)
if err != nil {
logger.Warnw(ctx, "unable-to-initialize-tracing-and-log-correlation-module", log.Fields{"error": err})
} else {
defer func() {
err = closer.Close()
if err != nil {
logger.Errorw(ctx, "failed-to-close-trace-closer", log.Fields{"error": err})
}
}()
}
logger.Infow(ctx, "logging-is-setup", log.Fields{"code": 123})
anotherFn(ctx, tracer)
}
func anotherFn(ctx context.Context, tracer opentracing.Tracer) {
parentSpan := opentracing.SpanFromContext(ctx)
sp := tracer.StartSpan(
"anotherFn",
opentracing.ChildOf(parentSpan.Context()))
logger.Infow(opentracing.ContextWithSpan(ctx, sp), "some-log-message-in-another-function", log.Fields{"code": 243})
}
@teone
Copy link
Author

teone commented Nov 18, 2023

Will log:

2023-11-17T16:44:30.047-0800    info    log-example/main.go:77  logging-is-setup        {"instanceId": "test-instance", "op-id": "65addf9e8be15000", "op-name": "package-main", "code": 123}
2023-11-17T16:44:30.047-0800    info    log-example/main.go:86  some-log-message-in-another-function    {"instanceId": "test-instance", "op-name": "package-main", "task-id": "5205f502002b9e07", "task-name": "anotherFn", "op-id": "65addf9e8be15000", "code": 243}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment