public static IApplicationBuilder UseZipkin(this IApplicationBuilder app, Action <ZipkinConfiguration> configureAction) { if (app == null) { throw new ArgumentNullException(nameof(app)); } var loggerFactory = app.ApplicationServices.GetService(typeof(ILoggerFactory)) as ILoggerFactory; if (loggerFactory == null) { throw new ArgumentNullException(nameof(loggerFactory)); } var lifetime = app.ApplicationServices.GetService <IApplicationLifetime>(); if (lifetime == null) { throw new ArgumentNullException(nameof(lifetime)); } var config = new ZipkinConfiguration(); configureAction(config); lifetime.ApplicationStarted.Register(() => { TraceManager.SamplingRate = config.SamplingRate; var logger = new TracingLogger(loggerFactory, "zipkin4net"); var httpSender = new HttpZipkinSender(config.Url, config.ContentType); var tracer = new ZipkinTracer(httpSender, new JSONSpanSerializer()); TraceManager.RegisterTracer(tracer); TraceManager.Start(logger); }); lifetime.ApplicationStopped.Register(() => TraceManager.Stop()); app.UseTracing($"{AppDomain.CurrentDomain.FriendlyName}"); return(app); }
public static IServiceCollection AddZipkin(this IServiceCollection services, Action <ZipkinConfiguration> configuration, ILoggerFactory factory) { services.TryAddSingleton <ITraceFactory, TraceFactory>(); if (factory == null) { throw new ArgumentNullException(nameof(factory)); } var config = new ZipkinConfiguration(); configuration(config); TraceManager.SamplingRate = config.SamplingRate; var logger = new TracingLogger(factory, "zipkin4net"); var httpSender = new HttpZipkinSender(config.Url, config.ContentType); var tracer = new ZipkinTracer(httpSender, new JSONSpanSerializer()); TraceManager.RegisterTracer(tracer); TraceManager.Start(logger); return(services); }