package main import ( "flag" "os" "sandc/app/eonline/internal/conf" zaplogger "github.com/go-kratos/kratos/contrib/log/zap/v2" "github.com/go-kratos/kratos/v2/config" "github.com/go-kratos/kratos/v2/config/file" "github.com/go-kratos/kratos/v2/log" "github.com/go-kratos/kratos/v2/middleware/tracing" "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/exporters/jaeger" "go.opentelemetry.io/otel/sdk/resource" tracesdk "go.opentelemetry.io/otel/sdk/trace" semconv "go.opentelemetry.io/otel/semconv/v1.4.0" "go.uber.org/zap" "go.uber.org/zap/zapcore" ) // go build -ldflags "-X main.Version=x.y.z" var ( // Name is the name of the compiled software. Name = "eonline.async" // Version is the version of the compiled software. Version = "0.1.0" // flagconf is the config flag. flagconf string id, _ = os.Hostname() ) func init() { flag.StringVar(&flagconf, "conf", "configs/config.yaml", "config path, eg: -conf config.yaml") } func main() { flag.Parse() encoderCfg := zapcore.EncoderConfig{ LevelKey: "level", EncodeLevel: zapcore.LowercaseLevelEncoder, } out := zapcore.AddSync(os.Stdout) // replace real writer core := zapcore.NewCore(zapcore.NewJSONEncoder(encoderCfg), out, zap.DebugLevel) zlogger := zap.New(core).WithOptions() logger := log.With(zaplogger.NewLogger(zlogger), "ts", log.DefaultTimestamp, "caller", log.DefaultCaller, "service.id", id, "service.name", Name, "service.version", Version, "trace_id", tracing.TraceID(), "span_id", tracing.SpanID(), ) c := config.New( config.WithSource( file.NewSource(flagconf), ), ) if err := c.Load(); err != nil { panic(err) } var bc conf.Bootstrap if err := c.Scan(&bc); err != nil { panic(err) } exp, err := jaeger.New(jaeger.WithCollectorEndpoint(jaeger.WithEndpoint(bc.Server.TraceEndpoint))) if err != nil { panic(err) } tp := tracesdk.NewTracerProvider( tracesdk.WithBatcher(exp), tracesdk.WithResource(resource.NewSchemaless( semconv.ServiceNameKey.String(Name), )), ) otel.SetTracerProvider(tp) job, cleanup, err := initApp(bc.Data, &bc, bc.Server, bc.Queue, logger) if err != nil { panic(err) } defer cleanup() if err := job.Run(); err != nil { panic(err) } }