コード例 #1
0
        private static void AddTraceIdGenerator(this ILogServiceCollection services)
        {
            services.AddDependency(s => s.TryAddScoped <FallbackTraceIdAccessor, FallbackTraceIdAccessor>());
            if (!ExpectedTraceIdGeneratorName.HasValue())
            {
                services.AddDependency(s => s.TryAddScoped <ILogTraceIdGenerator, IServiceProvider>(__traceIdGeneratorFactory));
                ExpectedTraceIdGeneratorName.Value = nameof(SystemTraceIdGenerator);
            }

            // ReSharper disable once InconsistentNaming
            ILogTraceIdGenerator __traceIdGeneratorFactory(IServiceProvider provider)
            {
                //1. Get traceIdAccessor and fallbackTraceIdAccessor from ServiceProvider
                var traceIdAccessor  = provider.GetService <TraceIdAccessor>();
                var fallbackAccessor = provider.GetRequiredService <FallbackTraceIdAccessor>();

                //2. Create a new instance of SystemTraceIdGenerator
                var generator = new SystemTraceIdGenerator(traceIdAccessor, fallbackAccessor);

                //3. Scoped update
                LogTraceIdGenerator.ScopedUpdate(generator);

                //4. Done, and return.
                return(generator);
            }
        }
コード例 #2
0
        private static ILogServiceCollection UseExceptionExtensionsCore(this ILogServiceCollection service, IOptions <ExceptionOptions> settings,
                                                                        Action <IConfiguration, ExceptionConfiguration, LoggingConfiguration> config = null)
        {
            var exceptionDestructuringAccessor = new ExceptionDestructuringAccessor();

            service.AddExtraSinkSettings(settings.Value, config);
            service.AddDependency(s => s.TryAddSingleton(settings));
            service.AddDependency(s => s.TryAddSingleton <IExceptionDestructuringAccessor>(exceptionDestructuringAccessor));
            service.AddEnricher(() => new ExceptionEnricher(exceptionDestructuringAccessor.Get()));

            RegisterCoreComponentsTypes();

            return(service);
        }
コード例 #3
0
        public static ILogServiceCollection AddExceptionless(this ILogServiceCollection services, IOptions <ExceptionlessSinkOptions> settings,
                                                             Action <IConfiguration, ExceptionlessSinkConfiguration> configAct = null)
        {
            services.AddSinkSettings <ExceptionlessSinkOptions, ExceptionlessSinkConfiguration>(settings.Value, (conf, sink) => configAct?.Invoke(conf, sink));
            services.AddDependency(s => {
                s.AddScoped <ILogPayloadClient, ExceptionlessPayloadClient>();
                s.AddSingleton <ILogPayloadClientProvider, ExceptionlessPayloadClientProvider>();
                s.TryAdd(ServiceDescriptor.Singleton(settings));
            });
            if (!string.IsNullOrWhiteSpace(settings.Value.OriginConfigFilePath))
            {
                services.ModifyConfigurationBuilder(b => b.AddFile(settings.Value.OriginConfigFilePath, settings.Value.OriginConfigFileType));
                services.AddOriginConfigAction(root => ExceptionlessClient.Default.Configuration.ReadFromConfiguration(root));
            }
            else if (services.BeGivenConfigurationBuilder || services.BeGivenConfigurationRoot)
            {
                services.AddOriginConfigAction(root => ExceptionlessClient.Default.Configuration.ReadFromConfiguration(root));
            }

            if (!string.IsNullOrWhiteSpace(settings.Value.ApiKey))
            {
                services.AddOriginConfigAction(root => ExceptionlessClient.Default.Startup(settings.Value.ApiKey));
            }
            else
            {
                services.AddOriginConfigAction(root => ExceptionlessClient.Default.Startup());
            }

            RegisterCoreComponentsTypes();

            return(services);
        }
コード例 #4
0
        /// <summary>
        /// Register System TraceId generator for Autofac
        /// </summary>
        /// <param name="services"></param>
        /// <returns></returns>
        /// <exception cref="ArgumentNullException"></exception>
        public static ILogServiceCollection RegisterSystemTraceIdGenerator(this ILogServiceCollection services)
        {
            if (services is null)
            {
                throw new ArgumentNullException(nameof(services));
            }

            if (!ExpectedTraceIdGeneratorName.HasValue())
            {
                services.AddDependency(s => s.AddScoped <ILogTraceIdGenerator, IComponentContext>(__traceIdGeneratorFactory));
                ExpectedTraceIdGeneratorName.Value = nameof(SystemTraceIdGenerator);
            }

            // ReSharper disable once InconsistentNaming
            ILogTraceIdGenerator __traceIdGeneratorFactory(IComponentContext provider)
            {
                //1. Get traceIdAccessor and fallbackTraceIdAccessor from ServiceProvider
                var traceIdAccessor  = provider.ResolveOptional <TraceIdAccessor>();
                var fallbackAccessor = provider.Resolve <FallbackTraceIdAccessor>();

                //2. Create a new instance of SystemTraceIdGenerator
                var generator = new SystemTraceIdGenerator(traceIdAccessor, fallbackAccessor);

                //3. Scoped update
                LogTraceIdGenerator.ScopedUpdate(generator);

                //4. Done, and return.
                return(generator);
            }

            return(services);
        }
        private static void RegisterEntityFrameworkInterceptor(ILogServiceCollection services, IOptions <EfEnricherOptions> settings)
        {
            services.AddDependency(s => s.TryAddSingleton <IServiceProvider>(__efDescriptorFactory, typeof(EfInterceptorDescriptor)));
            services.AddDependency(s => s.TryAddSingleton <IServiceProvider>(__efIntegrationFactory, typeof(EfIntegrationActivation)));

            // ReSharper disable once InconsistentNaming
            object __efDescriptorFactory(IServiceProvider provider)
            {
                return(new EfInterceptorDescriptor(provider.GetService <ILoggingServiceProvider>(), settings));
            }

            // ReSharper disable once InconsistentNaming
            object __efIntegrationFactory(IServiceProvider provider)
            {
                return(new EfIntegrationActivation(provider.GetService <EfInterceptorDescriptor>()));
            }
        }
コード例 #6
0
 private static void RegisterCoreComponents(ILogServiceCollection services, IOptions <ConsoleSinkOptions> settings)
 {
     services.AddDependency(s => {
         s.AddScoped <ILogPayloadClient, ConsolePayloadClient>();
         s.AddSingleton <ILogPayloadClientProvider, ConsolePayloadClientProvider>();
         s.TryAdd(ServiceDescriptor.Singleton(settings));
     });
 }
コード例 #7
0
        private static void RegisterNHibernateInitialization(ILogServiceCollection services, IOptions <NhEnricherOptions> settings)
        {
            services.AddDependency(s => s.TryAddSingleton <IServiceProvider>(__nhibernateInitFactory, typeof(StaticServiceResolveInitialization)));

            // ReSharper disable once InconsistentNaming
            object __nhibernateInitFactory(IServiceProvider provider)
            {
                return(new StaticServiceResolveInitialization(provider.GetRequiredService <ILoggingServiceProvider>(), settings.Value));
            }
        }
コード例 #8
0
        /// <summary>
        /// Register Microsoft ASP.NET Core Trace Id generator
        /// </summary>
        /// <param name="services"></param>
        /// <returns></returns>
        public static ILogServiceCollection RegisterAspNetCoreTraceIdGenerator(this ILogServiceCollection services)
        {
            if (!ExpectedTraceIdGeneratorName.HasValue())
            {
                services.AddDependency(s => s.AddScoped <ILogTraceIdGenerator, AspNetCoreTraceIdGenerator>());
                ExpectedTraceIdGeneratorName.Value = nameof(AspNetCoreTraceIdGenerator);
            }

            return(services);
        }
コード例 #9
0
        private static void RegisterSqlSugarInterceptor(ILogServiceCollection services, IOptions <SqlSugarEnricherOptions> settings)
        {
            services.AddDependency(s => s.TryAddSingleton <IServiceProvider>(__sqlsugarInterceptorFactory, typeof(SqlSugarInterceptorDescriptor)));

            // ReSharper disable once InconsistentNaming
            object __sqlsugarInterceptorFactory(IServiceProvider provider)
            {
                return(new SqlSugarInterceptorDescriptor(provider.GetService <ILoggingServiceProvider>(), settings));
            }
        }
コード例 #10
0
        private static void RegisterFreeSqlInterceptor(ILogServiceCollection services, IOptions <FreeSqlEnricherOptions> settings)
        {
            services.AddDependency(s => s.TryAdd(ServiceDescriptor.Singleton(typeof(FreeSqlInterceptorDescriptor), __freesqlInterceptorFactory)));

            // ReSharper disable once InconsistentNaming
            object __freesqlInterceptorFactory(IServiceProvider provider)
            {
                return(new FreeSqlInterceptorDescriptor(provider.GetService <ILoggingServiceProvider>(), settings));
            }
        }
コード例 #11
0
        /// <summary>
        /// Add CorrelationId Integration
        /// </summary>
        /// <param name="service"></param>
        /// <returns></returns>
        /// <exception cref="ArgumentNullException"></exception>
        public static ILogServiceCollection AddCorrelationIdIntegration(this ILogServiceCollection service)
        {
            if (service is null)
            {
                throw new ArgumentNullException(nameof(service));
            }

            service.AddDependency(s => s.TryAdd(ServiceDescriptor.Scoped <ILogTraceIdGenerator, CorrelationIdGenerator>()));
            ExpectedTraceIdGeneratorName.Value = nameof(CorrelationIdGenerator);

            return(service);
        }
        private static void RegisterEntityFrameworkCoreInterceptor(ILogServiceCollection services, IOptions <EfCoreEnricherOptions> settings)
        {
            services.AddDependency(s => s.TryAddSingleton <IServiceProvider>(__efcoreInterceptorFactory, typeof(EfCoreInterceptorDescriptor)));

            // ReSharper disable once InconsistentNaming
            object __efcoreInterceptorFactory(IServiceProvider provider)
            {
                var instance = new EfCoreInterceptorDescriptor(provider.GetService <ILoggingServiceProvider>(), settings);

                EfCoreInterceptorDescriptor.Instance = instance;
                return(instance);
            }
        }
コード例 #13
0
        private static void RegisterPostgresActivation(ILogServiceCollection services, IOptions <PostgresEnricherOptions> settings)
        {
            services.AddDependency(s => s.TryAddSingleton <IServiceProvider>(__activationFactory, typeof(NpgsqlLogActivation)));

            // ReSharper disable once InconsistentNaming
            object __activationFactory(IServiceProvider provider)
            {
                var implementation = new NpgsqlLogActivation(provider.GetService <ILoggingServiceProvider>(), settings);

                implementation.Invoke();
                return(implementation);
            }
        }
コード例 #14
0
        /// <summary>
        /// Add Tencent Cloud CLS support for Cosmos.Logging
        /// </summary>
        /// <param name="services"></param>
        /// <param name="settings"></param>
        /// <param name="configAct"></param>
        /// <returns></returns>
        public static ILogServiceCollection AddTencentCloudCls(this ILogServiceCollection services, IOptions <TencentCloudClsSinkOptions> settings,
                                                               Action <IConfiguration, TencentCloudClsSinkConfiguration> configAct = null)
        {
            services.AddSinkSettings(settings.Value, configAct);
            services.AddDependency(s => {
                s.AddScoped <ILogPayloadClient, TencentCloudClsPayloadClient>();
                s.AddSingleton <ILogPayloadClientProvider, TencentCloudClsPayloadClientProvider>();
                s.TryAddSingleton(settings);
            });

            RegisterCoreComponentsTypes();

            return(services);
        }
コード例 #15
0
        /// <summary>
        /// Add sample log
        /// </summary>
        /// <param name="services"></param>
        /// <param name="settings"></param>
        /// <param name="config"></param>
        /// <returns></returns>
        public static ILogServiceCollection AddSampleLog(this ILogServiceCollection services, IOptions <SampleOptions> settings,
                                                         Action <IConfiguration, SampleLogConfiguration> config = null)
        {
            services.AddSinkSettings <SampleOptions, SampleLogConfiguration>(settings.Value, (conf, sink) => config?.Invoke(conf, sink));
            services.AddDependency(s => {
                s.AddScoped <ILogPayloadClient, SampleLogPayloadClient>();
                s.AddSingleton <ILogPayloadClientProvider, SampleLogPayloadClientProvider>();
                s.TryAddSingleton(settings);
            });

            RegisterCoreComponentsTypes();

            return(services);
        }
コード例 #16
0
        /// <summary>
        /// Add TomatoLog for Cosmos.Logging
        /// </summary>
        /// <param name="services"></param>
        /// <param name="settings"></param>
        /// <param name="configAct"></param>
        /// <returns></returns>
        public static ILogServiceCollection AddTomatoLog(this ILogServiceCollection services, IOptions <TomatoLogSinkOptions> settings,
                                                         Action <IConfiguration, TomatoLogSinkConfiguration> configAct = null)
        {
            services.AddSinkSettings <TomatoLogSinkOptions, TomatoLogSinkConfiguration>(settings.Value, (conf, sink) => configAct?.Invoke(conf, sink));
            services.AddDependency(s => {
                s.AddScoped <ILogPayloadClient, TomatoLogPayloadClient>();
                s.AddSingleton <ILogPayloadClientProvider, TomatoLogPayloadClientProvider>();
                s.TryAdd(ServiceDescriptor.Singleton(settings));
            });

            RegisterCoreComponentsTypes();

            return(services);
        }
コード例 #17
0
        /// <summary>
        /// Add file log for Cosmos.Logging
        /// </summary>
        /// <param name="services"></param>
        /// <param name="settings"></param>
        /// <param name="config"></param>
        /// <returns></returns>
        public static ILogServiceCollection AddFilelog(this ILogServiceCollection services, IOptions <FileSinkOptions> settings,
                                                       Action <IConfiguration, FileSinkLogConfiguration> config = null)
        {
            services.AddSinkSettings(settings.Value, config);
            services.AddDependency(s => {
                s.AddScoped <ILogPayloadClient, LocalFileLogPayloadClient>();
                s.AddSingleton <ILogPayloadClientProvider, LocalFileLogPayloadClientProvider>();
                s.TryAddSingleton(settings);
            });

            InternalRendererActivation.Action();
            RegisterCoreComponentsTypes();

            return(services);
        }
コード例 #18
0
        /// <summary>
        /// Add Log4Net support for Cosmos.Logging
        /// </summary>
        /// <param name="services"></param>
        /// <param name="settings"></param>
        /// <param name="configAct"></param>
        /// <returns></returns>
        public static ILogServiceCollection AddLog4Net(this ILogServiceCollection services, IOptions <Log4NetSinkOptions> settings,
                                                       Action <IConfiguration, Log4NetSinkConfiguration> configAct = null)
        {
            services.AddSinkSettings(settings.Value, configAct);
            services.AddDependency(s => {
                s.AddScoped <ILogPayloadClient, Log4NetPayloadClient>();
                s.AddSingleton <ILogPayloadClientProvider, Log4NetPayloadClientProvider>();
                s.TryAdd(ServiceDescriptor.Singleton(settings));
            });

            RegisterNativeConfigurationFile(services, settings);

            RegisterCoreComponentsTypes();

            return(services);
        }
コード例 #19
0
        /// <summary>
        /// Add exceptionless support for Cosmos.Logging
        /// </summary>
        /// <param name="services"></param>
        /// <param name="settings"></param>
        /// <param name="configAct"></param>
        /// <returns></returns>
        public static ILogServiceCollection AddExceptionless(this ILogServiceCollection services, IOptions <ExceptionlessSinkOptions> settings,
                                                             Action <IConfiguration, ExceptionlessSinkConfiguration> configAct = null)
        {
            services.AddSinkSettings(settings.Value, configAct);
            services.AddDependency(s => {
                s.AddScoped <ILogPayloadClient, ExceptionlessPayloadClient>();
                s.AddSingleton <ILogPayloadClientProvider, ExceptionlessPayloadClientProvider>();
                s.TryAdd(ServiceDescriptor.Singleton(settings));
            });

            RegisterOriginalConfig(services, settings.Value.OriginalConfigFilePath, settings.Value.OriginalConfigFileType);

            RegisterApiKey(services, settings.Value.ApiKey);

            RegisterCoreComponentsTypes();

            return(services);
        }
コード例 #20
0
        public static ILogServiceCollection AddLog4Net(this ILogServiceCollection services, IOptions <Log4NetSinkOptions> settings,
                                                       Action <IConfiguration, Log4NetSinkConfiguration> configAct = null)
        {
            services.AddSinkSettings <Log4NetSinkOptions, Log4NetSinkConfiguration>(settings.Value, (conf, sink) => configAct?.Invoke(conf, sink));
            services.AddDependency(s => {
                s.AddScoped <ILogPayloadClient, Log4NetPayloadClient>();
                s.AddSingleton <ILogPayloadClientProvider, Log4NetPayloadClientProvider>();
                s.TryAdd(ServiceDescriptor.Singleton(settings));
            });
            if (!string.IsNullOrWhiteSpace(settings.Value.OriginConfigFilePath))
            {
                services.AddOriginConfigAction(root => InternalUseCustomConfigFilePath(settings.Value.OriginConfigFilePath, settings.Value.WatchOriginConfigFile));
            }

            RegisterCoreComponentsTypes();

            return(services);
        }
コード例 #21
0
 private static void RegisterCoreComponents(this ILogServiceCollection services)
 {
     services.AddDependency(s => s.TryAddSingleton <ILoggingServiceProvider, ConsoleLoggingServiceProvider>());
     services.AddDependency(s => s.TryAddSingleton <IPropertyFactoryAccessor, ShortcutPropertyFactoryAccessor>());
 }
コード例 #22
0
 private static void RegisterLoggerFactory(this ILogServiceCollection services)
 {
     services.AddDependency(s => s.TryAddSingleton <ILoggerFactory, IServiceProvider>(
                                provider => new MicrosoftLoggerFactory(provider.GetService <ILoggingServiceProvider>())));
 }
コード例 #23
0
 private static void RegisterTraceIdGenerator(this ILogServiceCollection services)
 {
     services.AddDependency(s => s.TryAddScoped <FallbackTraceIdAccessor, FallbackTraceIdAccessor>());
 }
コード例 #24
0
 public static void AppendOrOverride(this ILogServiceCollection services)
 {
     services.AddDependency(s => s.TryAddSingleton <ILoggingServiceProvider, HostingLoggingServiceProvider>());
 }
コード例 #25
0
 private static ILogServiceCollection RegisterToRunsOnConsole(this ILogServiceCollection services)
 {
     services.AddDependency(s => s.AddSingleton <ILoggingServiceProvider, ConsoleLoggingServiceProvider>());
     services.AddDependency(s => s.AddSingleton <IPropertyFactoryAccessor, ShortcutPropertyFactoryAccessor>());
     return(services);
 }
コード例 #26
0
 private static ILogServiceCollection RegisterToRunsOnConsole(this ILogServiceCollection services)
 {
     return(services.AddDependency(s => s.AddSingleton <ILoggingServiceProvider, ConsoleLoggingServiceProvider>()));
 }
コード例 #27
0
 private static void RegisterCoreComponents(this ILogServiceCollection services)
 {
     services.AddDependency(s => s.TryAddSingleton <ILoggingServiceProvider, StandardLogServiceProvider>());
     services.AddDependency(s => s.TryAddSingleton <IPropertyFactoryAccessor, ShortcutPropertyFactoryAccessor>());
     services.AddDependency(s => s.TryAddSingleton(typeof(ILogger <>), typeof(MicrosoftLoggerAdapter <>)));
 }