示例#1
0
 public TestLoggerFactory(ITestOutputHelper testOutputHelper, string outputTemplate = "{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level}] {Message}{NewLine}{Exception}", LogEventLevel logEventLevel = LogEventLevel.Debug)
 {
     _loggerProvider = new SerilogLoggerProvider(
         new LoggerConfiguration()
         .MinimumLevel.Is(logEventLevel)
         .WriteTo.TestOutput(testOutputHelper)
         .CreateLogger()
         );
 }
示例#2
0
        public void Setup()
        {
            var serilogger = new LoggerConfiguration()
                             .MinimumLevel.Verbose()
                             .WriteTo
                             .StringList(logLines = new List <string>())
                             .CreateLogger();
            var logger = new SerilogLoggerProvider(serilogger).CreateLogger("Test");

            sut = new AComponent(logger, new Settings());
        }
        private Tuple <SerilogLogger, SerilogSink> SetUp(LogLevel logLevel)
        {
            var sink = new SerilogSink();

            var l = new global::Serilog.Core.Logger(new global::Serilog.Core.LoggingLevelSwitch(logLevel), sink, new EmptyEnricher());

            var provider = new SerilogLoggerProvider(l);
            var logger   = (SerilogLogger)provider.CreateLogger(Name);

            return(new Tuple <SerilogLogger, SerilogSink>(logger, sink));
        }
        public MySerilogLoggerProvider(MyLoggerProviderRegistration myLoggerRegistration)
        {
            _myLoggerRegistration = myLoggerRegistration;

            _serilogLoggerConfiguration = new LoggerConfiguration()
                                          .Enrich.FromLogContext()
                                          .WriteTo.Console(restrictedToMinimumLevel: myLoggerRegistration.ConsoleConfiguration.MinimumLevel.ToSerilogLevel())
                                          .WriteTo.Elasticsearch(GetElasticsearchOptions(myLoggerRegistration.ElasticsearchConfiguration))
            ;
            _serilogLoggerProvider = new SerilogLoggerProvider(_serilogLoggerConfiguration.CreateLogger(), true);
        }
 public SerilogLoggerFactory
 (
     Serilog.ILogger logger = null,
     bool dispose           = false
 )
 {
     _provider = new SerilogLoggerProvider
                 (
         logger,
         dispose
                 );
 }
示例#6
0
        private void App_OnStartup(object sender, StartupEventArgs e)
        {
            try
            {
                Log.Logger = new LoggerConfiguration()
                             .MinimumLevel.Information()
                             .WriteTo.File("logs\\i7log.txt", rollingInterval: RollingInterval.Day)
                             .CreateLogger();

                var logger = new SerilogLoggerProvider(Log.Logger).CreateLogger(nameof(SettingsStore));
                InitializeSettings(logger);

                var uri = new UriBuilder("http", "localhost", ApplicationSettings.Instance.TsengSettings.PortNumber).Uri;
                _host = WebHost.CreateDefaultBuilder(e.Args)
                        .UseStartup <InteractiveSeven.Web.Startup>()
                        .UseUrls(uri.AbsoluteUri)
                        .ConfigureServices(DependencyRegistrar.ConfigureServices)
                        .Build();

                if (e.Args.Contains("--7h"))
                {
                    (this._host.Services.GetService <IModded>() as Modded)?.SetLoadedBy7H(true);
                }

                _logger = _host.Services.GetService <ILogger <App> >();

                _logger.LogInformation("Starting Web Host...");

                _host.Start();

                var dataLoader = _host.Services.GetService <DataLoader>();
                _logger.LogInformation("Starting Elena DataLoader...");
                dataLoader.LoadPreviousData();

                _workloadCoordinator = _host.Services.GetService <WorkloadCoordinator>();

                _tsengMonitor = _host.Services.GetService <TsengMonitor>();

                _logger.LogInformation("Starting Tseng Background Monitoring...");
                Task.Run(() => _tsengMonitor.Start()).RunInBackgroundSafely(false, LogTsengError);

                _logger.LogInformation("Initializing Theming...");
                InitializeTheming();

                _logger.LogInformation("Showing App Main Window...");
                _host.Services.GetRequiredService <MainWindow>().Show();
            }
            catch (Exception exception)
            {
                Log.Error(exception, "Error Loading Application");
            }
        }
        static Tuple <SerilogLogger, SerilogSink> SetUp(LogLevel logLevel)
        {
            var sink = new SerilogSink();

            var serilogLogger = new LoggerConfiguration()
                                .WriteTo.Sink(sink)
                                .MinimumLevel.Is(LevelConvert.ToSerilogLevel(logLevel))
                                .CreateLogger();

            var provider = new SerilogLoggerProvider(serilogLogger);
            var logger   = (SerilogLogger)provider.CreateLogger(Name);

            return(new Tuple <SerilogLogger, SerilogSink>(logger, sink));
        }
        static bool TryCreateProvider(
            IConfigurationSection configuration,
            LogLevel defaultMinimumLevel,
            out SerilogLoggerProvider provider)
        {
            var serverUrl = configuration["ServerUrl"];

            if (string.IsNullOrWhiteSpace(serverUrl))
            {
                SelfLog.WriteLine("Unable to add the Seq logger: no ServerUrl was present in the configuration");
                provider = null;
                return(false);
            }

            var apiKey = configuration["ApiKey"];

            if (string.IsNullOrWhiteSpace(apiKey))
            {
                apiKey = null;
            }

            var minimumLevel = defaultMinimumLevel;
            var levelSetting = configuration["MinimumLevel"];

            if (!string.IsNullOrWhiteSpace(levelSetting))
            {
                if (!Enum.TryParse(levelSetting, out minimumLevel))
                {
                    SelfLog.WriteLine("The minimum level setting `{0}` is invalid", levelSetting);
                    minimumLevel = LogLevel.Information;
                }
            }

            var levelOverrides = new Dictionary <string, LogLevel>();

            foreach (var overr in configuration.GetSection("LevelOverride").GetChildren())
            {
                LogLevel value;
                if (!Enum.TryParse(overr.Value, out value))
                {
                    SelfLog.WriteLine("The level override setting `{0}` for `{1}` is invalid", overr.Value, overr.Key);
                    continue;
                }

                levelOverrides[overr.Key] = value;
            }

            provider = CreateProvider(serverUrl, apiKey, minimumLevel, levelOverrides);
            return(true);
        }
示例#9
0
        static void Main(string[] args)
        {
            Log.Logger = new LoggerConfiguration()
                         .MinimumLevel.Debug()
                         .WriteTo.Console(theme: AnsiConsoleTheme.Literate)
                         .CreateLogger();

            var logger = new SerilogLoggerProvider(Log.Logger).CreateLogger(typeof(LauncherBase).Name);


            new Program(logger).Launch(args, true, true);
            Console.WriteLine("Press any key to stop the servers.");
            Console.ReadKey(); //block with Console
        }
        private Tuple <SerilogLogger, SerilogSink> SetUp(LogLevel logLevel)
        {
            var sink = new SerilogSink();

            var config = new LoggerConfiguration()
                         .WriteTo.Sink(sink);

            SetMinLevel(config, logLevel);

            var provider = new SerilogLoggerProvider(config.CreateLogger());
            var logger   = (SerilogLogger)provider.CreateLogger(Name);

            return(new Tuple <SerilogLogger, SerilogSink>(logger, sink));
        }
        public static void Initialize(IConfiguration configuration)
        {
            lock (SyncObj)
            {
                if (_init)
                {
                    return;
                }
                //default behaviour: if route is ignored - don't log its events except errors.
                //if error message in IgnoreErrors list, don't log this error

                var ignoreList = configuration.GetSection("Serilog:ignoreList").Get <IgnoreOptions[]>()
                                 ?.Where(x => !string.IsNullOrWhiteSpace(x.Route)).ToArray() ??
                                 new IgnoreOptions[0];

                var filterLogs = false;

                if (ignoreList.Any())
                {
                    filterLogs = true;
                    foreach (var ignoreOption in ignoreList)
                    {
                        ignoreOption.RouteRegex = new Regex(ignoreOption.Route);
                    }
                }

                Log.Logger = new LoggerConfiguration()
                             .If(filterLogs,
                                 x => x.Filter.ByExcluding(log =>
                {
                    try
                    {
                        return(LogExcludeFilter(log, ignoreList.ToArray()));
                    }
                    catch (Exception ex)
                    {
                        //use console to avoid stack overflow
                        Console.Error.WriteLine($"Exception in logger exclude filter: {ex.Message}");
                        return(false);
                    }
                }))
                             .ReadFrom.Configuration(configuration)
                             .CreateLogger();

                _loggerProvider = new SerilogLoggerProvider(Log.Logger);

                _init = true;
            }
        }
示例#12
0
        // This method gets called by the runtime. Use this method to add services to the container.
        // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
        public void ConfigureServices(IServiceCollection services)
        {
            var logger = new SerilogLoggerProvider(Log.Logger).CreateLogger(nameof(Program));

            services.AddSingleton(logger);

            var wowProcess = new WowProcess();
            var wowScreen  = new WowScreen(logger, wowProcess);

            wowScreen.GetRectangle(out var rect);

            var addonConfig       = AddonConfig.Load();
            var addonConfigurator = new AddonConfigurator(logger, addonConfig);

            if (!addonConfig.IsDefault() && !addonConfigurator.Installed())
            {
                // At this point the webpage never loads so fallback to configuration page
                AddonConfig.Delete();
                DataFrameConfiguration.RemoveConfiguration();
            }

            if (DataFrameConfiguration.Exists() &&
                !DataFrameConfiguration.IsValid(rect, addonConfigurator.GetInstalledVersion()))
            {
                // At this point the webpage never loads so fallback to configuration page
                DataFrameConfiguration.RemoveConfiguration();
            }

            if (AddonConfig.Exists() && DataFrameConfiguration.Exists())
            {
                var dataConfig    = DataConfig.Load();
                var pather        = GetPather(logger, dataConfig);
                var botController = new BotController(logger, pather, dataConfig, Configuration);
                services.AddSingleton <IBotController>(botController);
                services.AddSingleton <IGrindSessionHandler>(botController.GrindSessionHandler);
                services.AddSingleton <IGrindSession>(botController.GrindSession);
                services.AddSingleton <IAddonReader>(botController.AddonReader);
                services.AddMatBlazor();
            }
            else
            {
                services.AddSingleton <IBotController>(new ConfigBotController());
                services.AddSingleton <IAddonReader>(new ConfigAddonReader());
            }

            services.AddRazorPages();
            services.AddServerSideBlazor();
            services.AddBlazorTable();
        }
示例#13
0
    public SerilogLogger(
        SerilogLoggerProvider provider,
        ILogger?logger = null,
        string?name    = null)
    {
        _provider = provider ?? throw new ArgumentNullException(nameof(provider));

        // If a logger was passed, the provider has already added itself as an enricher
        _logger = logger ?? Serilog.Log.Logger.ForContext(new[] { provider });

        if (name != null)
        {
            _logger = _logger.ForContext(Constants.SourceContextPropertyName, name);
        }
    }
示例#14
0
        private Tuple <SerilogLogger, SerilogSink> SetUp(LogLevel logLevel)
        {
            var sink = new SerilogSink();

            var config = new LoggerConfiguration()
                         .WriteTo.Sink(sink);

            SetMinLevel(config, logLevel);

#pragma warning disable CA2000 // Dispose objects before losing scope
            var provider = new SerilogLoggerProvider(config.CreateLogger());
#pragma warning restore CA2000 // Dispose objects before losing scope
            var logger = (SerilogLogger)provider.CreateLogger(Name);

            return(new Tuple <SerilogLogger, SerilogSink>(logger, sink));
        }
        private Tuple<SerilogLogger, SerilogSink> SetUp(LogLevel logLevel)
        {
            var sink = new SerilogSink();

            var config = new LoggerConfiguration()
                .Enrich.WithMachineName()
                .Enrich.WithProcessId()
                .Enrich.WithThreadId()
                .WriteTo.Sink(sink);

            SetMinLevel(config, logLevel);

            var provider = new SerilogLoggerProvider(config.CreateLogger());
            var logger = (SerilogLogger)provider.CreateLogger(Name);

            return new Tuple<SerilogLogger, SerilogSink>(logger, sink);
        }
示例#16
0
        private Tuple <SerilogLogger, SerilogSink> SetUp(LogLevel logLevel)
        {
            var sink = new SerilogSink();

            var config = new LoggerConfiguration()
                         .Enrich.WithMachineName()
                         .Enrich.WithProcessId()
                         .Enrich.WithThreadId()
                         .WriteTo.Sink(sink);

            SetMinLevel(config, logLevel);

            var provider = new SerilogLoggerProvider(config.CreateLogger());
            var logger   = (SerilogLogger)provider.CreateLogger(_name);

            return(new Tuple <SerilogLogger, SerilogSink>(logger, sink));
        }
示例#17
0
        public TestLoggerFactory(
            ITestOutputHelper?testOutputHelper, string outputTemplate = "{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level}] {Message}{NewLine}{Exception}",
            LogEventLevel logEventLevel = LogEventLevel.Debug
            )
        {
            _subject          = new Subject <LogEvent>();
            _testOutputHelper = new InnerTestOutputHelper(testOutputHelper);

            _loggerProvider = new SerilogLoggerProvider(
                new LoggerConfiguration()
                .MinimumLevel.Is(logEventLevel)
                .WriteTo.TestOutput(_testOutputHelper, outputTemplate: outputTemplate)
                .WriteTo.Observers(x => x.Subscribe(_subject))
                .Enrich.FromLogContext()
                .CreateLogger()
                );
        }
        /// <summary>
        /// This is the entry point of the service host process.
        /// </summary>
        private static void Main()
        {
            Log.Logger = new LoggerConfiguration()
                         .WriteTo.ApplicationInsights(TelemetryConfiguration.Active, TelemetryConverter.Traces, Serilog.Events.LogEventLevel.Debug)
                         .MinimumLevel.Debug()
                         .CreateLogger();

            var logger = new SerilogLoggerProvider(Log.Logger, true)
                         .CreateLogger("Stateful-Sample");

            try
            {
                ServiceRuntime.RegisterServiceAsync(
                    "ReceiverServiceType",
                    context =>
                    new SampleService(
                        context,
                        logger,
                        new TelemetryClient(TelemetryConfiguration.Active),
                        new ReceiverOptions()
                {
                    ConnectionString = "",
                    ConsumerGroup    = "sf"
                },
                        ServiceEventSource.Current.Message,
                        partitionId => async(events, ct) => {
                    ServiceEventSource.Current.Message($"Handle events got {events.Count()} events.");
                    await EventHandler.Handle(events.ToArray());
                },
                        ct => Task.CompletedTask
                        )).GetAwaiter().GetResult();


                ServiceEventSource.Current.ServiceTypeRegistered(Process.GetCurrentProcess().Id, typeof(ReceiverService).Name);

                // Prevents this host process from terminating so services keep running.
                Thread.Sleep(Timeout.Infinite);
            }
            catch (Exception e)
            {
                ServiceEventSource.Current.ServiceHostInitializationFailed(e.ToString());
                throw;
            }
        }
示例#19
0
        static Bootstrapper()
        {
            // Create the container as usual.
            Container = new Container();
            Container.Options.DefaultLifestyle = Lifestyle.Singleton;

            var sink        = new BindableSink();
            var levelSwitch = new LoggingLevelSwitch();
            var serilogger  = new LoggerConfiguration()
                              .Enrich.FromLogContext()
                              .MinimumLevel.ControlledBy(levelSwitch)
                              .WriteTo.BindableSink(sink)
                              .CreateLogger();

            var logger = new SerilogLoggerProvider(serilogger).CreateLogger("test_logger");

            // Register Services:
            Container.Register <LoggingLevelSwitch>(() => levelSwitch);
            Container.Register <BindableSink>(() => sink);
            Container.Register <ILogger>(() => logger);
//
//            // Register Framework
            Container.Register <IServiceProvider>(() => Container);
            Container.Register <GlobalViewModel>();
            Container.Register <ICurrentView, GlobalViewModel>();
            Container.Register <IViewModelNavigator, GlobalViewModel>();
//
//            // Register Views
            Container.Register <App>();
            Container.Register <MainWindow>();
//            Container.Register<ServicesListViewModel>();
//            Container.Register<InstallViewModel>();
//            Container.Register<LogView>();
//
//            // Register ViewModels
//            Container.Register<MainWindowViewModel>();
//            Container.Register<ServicesListView>();
//            Container.Register<InstallView>();
//            Container.Register<LogViewViewModel>();

            Container.Verify();
        }
        public HttpRequestActivityTests()
        {
            _httpContext = new DefaultHttpContext();
            _httpContext.Features.Set <IHttpResponseFeature>(_responseFeature = new TestResponseFeature());

            Logger serilog = new LoggerConfiguration()
                             .MinimumLevel.Verbose()
                             .WriteTo.TestCorrelator()
                             .CreateLogger();

            var serilogProvider = new SerilogLoggerProvider(serilog);

            _logger = serilogProvider.CreateLogger("");

            _sut = new HttpRequestActivity(_logger, _httpContext, CorrelationHttpHeaders.CorrelationId);
            _correlationContext = new CorrelationContext
            {
                CorrelationId = Guid.NewGuid().ToString()
            };
        }
示例#21
0
        public static IHostBuilder CreateHostBuilder <TStartup>(MainOptions <TStartup> options) where TStartup : class
        {
            var hostBuilder = Host
                              .CreateDefaultBuilder(options.CommandLineArguments)
                              .ConfigureLogging((context, logging) =>
            {
                // Don't want any of the default crap.
                logging.ClearProviders();
            })
                              .UseSerilog();

            var logger = new SerilogLoggerProvider(Log.Logger).CreateLogger(nameof(Program));

            hostBuilder
            .ConfigureWebHostDefaults(webBuilder =>
            {
                if (options.StartupActivation is null)
                {
                    // Normal startup class with default constructor.
                    webBuilder.UseStartup <TStartup>();
                }
                else
                {
                    // Use the custom startup activation function, instead.
                    // REF: https://docs.microsoft.com/en-us/aspnet/core/release-notes/aspnetcore-5.0?view=aspnetcore-5.0#control-startup-class-activation
                    // (Pro Tip: this is a great way to add logging, to Startup.cs !!! YES!!!! )
                    //webBuilder.UseStartup(c => new TStartup(c));
                    webBuilder.UseStartup(context => options.StartupActivation(context, logger));

                    // The startup class (activated, above) will be activated in _this_ assmebly and not the main host/app assembly.
                    // This means that when things like 'MapControllers' tries to do an assembly scan (the default functionality)
                    // in the host/app assembly, it will FAIL to find any.
                    // As such, we actually need to really reset the main ApplicationKey to say it's for the provided startup class.
                    // Hat tip to: @aarondandy, @buildstarted and @xt0rted
                    var startupAssemblyName = options.StartupActivation.GetMethodInfo().DeclaringType !.GetTypeInfo().Assembly.GetName().Name;
                    webBuilder.UseSetting(WebHostDefaults.ApplicationKey, startupAssemblyName);
                }
            });

            return(hostBuilder);
        }
示例#22
0
        // This method gets called by the runtime. Use this method to add services to the container.
        // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
        public static void ConfigureServices(IServiceCollection services)
        {
            var logger = new SerilogLoggerProvider(Log.Logger).CreateLogger(nameof(Program));

            if (DataFrameConfiguration.ConfigurationExists())
            {
                var botController = new BotController(logger);
                services.AddSingleton <IBotController>(botController);
                services.AddSingleton <IAddonReader>(botController.AddonReader);
                botController.InitialiseBot();
            }
            else
            {
                services.AddSingleton <IBotController>(new ConfigBotController());
                services.AddSingleton <IAddonReader>(new ConfigAddonReader());
            }

            services.AddRazorPages();
            services.AddServerSideBlazor();

            //services.AddSingleton<RouteInfo>(botController.WowBot.RouteInfo);
        }
示例#23
0
        public IServiceProvider CreateLoggerServices(ITestOutputHelper output, string className, LogLevel minLogLevel, [CallerMemberName] string testName = null)
        {
            // Try to shorten the class name using the assembly name
            if (className.StartsWith(_assemblyName + "."))
            {
                className = className.Substring(_assemblyName.Length + 1);
            }

            SerilogLoggerProvider serilogLoggerProvider = null;

            if (!string.IsNullOrEmpty(_baseDirectory))
            {
                var testOutputFile = Path.Combine(_baseDirectory, _assemblyName, RuntimeInformation.FrameworkDescription.TrimStart('.'), className, $"{testName}.log");

                serilogLoggerProvider = ConfigureFileLogging(testOutputFile);
            }

            var serviceCollection = new ServiceCollection();

            serviceCollection.AddLogging(builder =>
            {
                builder.SetMinimumLevel(minLogLevel);

                if (output != null)
                {
                    builder.AddXunit(output, minLogLevel);
                }

                if (serilogLoggerProvider != null)
                {
                    // Use a factory so that the container will dispose it
                    builder.Services.AddSingleton <ILoggerProvider>(_ => serilogLoggerProvider);
                }
            });

            return(serviceCollection.BuildServiceProvider());
        }
        public CorrelationManagerTests()
        {
            _correlationContextAccessor = new CorrelationContextAccessor();

            _correlationIdFactoryMock = new Mock <ICorrelationIdFactory>();
            _correlationIdFactoryMock
            .Setup(m => m.Create())
            .Returns(() => GeneratedCorrelationId)
            .Verifiable();

            Logger serilogLogger = new LoggerConfiguration()
                                   .WriteTo.TestCorrelator()
                                   .CreateLogger();

            _logProvider = new SerilogLoggerProvider(serilogLogger);
            _logger      = new TestLogger <CorrelationManager>(_logProvider.CreateLogger(nameof(CorrelationManager)));

            _sut = new CorrelationManager(
                new CorrelationContextFactory(_correlationContextAccessor),
                _correlationIdFactoryMock.Object,
                _correlationContextAccessor,
                _logger
                );
        }
        /// <summary>
        /// Optional override to create listeners (like tcp, http) for this service instance.
        /// </summary>
        /// <returns>The collection of listeners.</returns>
        protected override IEnumerable <ServiceInstanceListener> CreateServiceInstanceListeners()
        {
            return(new ServiceInstanceListener[]
            {
                new ServiceInstanceListener(serviceContext =>

                                            new KestrelCommunicationListener(serviceContext, Options.ServiceEndpointName, (url, listener) =>
                {
                    try {
                        _logger.LogInformation("building kestrel app for {url} in {gatewayKey}", url, Options.GatewayOptions.Key);



                        var context = serviceContext.CodePackageActivationContext;
                        var config = context.GetConfigurationPackageObject("Config");

                        var builder = new WebHostBuilder()
                                      .UseKestrel()
                                      .ConfigureServices(ConfigureServices)
                                      //   .UseCustomServiceFabricIntegration(listener as CustomKestrelCommunicationListener , ServiceFabricIntegrationOptions.UseUniqueServiceUrl)
                                      //   .ConfigureServices((services)=>{ services.AddTransient<IStartupFilter, UseForwardedHeadersStartupFilter>(); })
                                      .UseContentRoot(Directory.GetCurrentDirectory());

                        if (Container.IsRegistered <IConfigureOptions <ApplicationInsights> >())
                        {
                            builder.UseApplicationInsights(Container.Resolve <ApplicationInsights>().InstrumentationKey);
                        }



                        builder.ConfigureServices((services) =>
                        {
                            services.AddSingleton(listener);
                            services.AddSingleton((sp) => new KestrelHostingAddresss {
                                Url = this.GetAddresses()["kestrel"]
                            });

                            services.AddSingleton <ITelemetryInitializer>((serviceProvider) => FabricTelemetryInitializerExtension.CreateFabricTelemetryInitializer(serviceContext))
                            .AddSingleton <ITelemetryModule>(new ServiceRemotingDependencyTrackingTelemetryModule())
                            .AddSingleton <ITelemetryModule>(new ServiceRemotingRequestTrackingTelemetryModule());

                            services.AddSingleton(new CodePackageVersionTelemetryInitializer());

                            if (Container.IsRegistered <IConfiguration>())
                            {
                                services.AddSingleton((sp) => Container.Resolve <IConfiguration>());
                            }
                        });

                        if (Container.IsRegistered <IConfiguration>())
                        {
                            _logger.LogInformation("UseConfiguration for {gatewayKey}", Options.GatewayOptions.Key);
                            builder.UseConfiguration(Container.Resolve <IConfiguration>());
                        }


                        if (config.Settings.Sections.Contains("Environment"))
                        {
                            //http://stackoverflow.com/questions/39109666/asp-net-core-environment-variables-not-being-used-when-debugging-through-a-servi



                            var environments = config.Settings.Sections["Environment"];
                            if (environments.Parameters.Contains("ASPNETCORE_ENVIRONMENT"))
                            {
                                var environment = environments.Parameters["ASPNETCORE_ENVIRONMENT"].Value;
                                _logger.LogInformation("UseEnvironment {environment} for {gatewayKey}", environment, Options.GatewayOptions.Key);
                                builder = builder.UseEnvironment(environment);
                            }
                        }

//#if NETCORE10
//                            if (Container.IsRegistered<ILoggerFactory>())
//                            {
//                                _logger.LogInformation("UseLoggerFactory for {gatewayKey}", Options.GatewayOptions.Key);
//                                builder.UseLoggerFactory(Container.Resolve<ILoggerFactory>());
//                            }
//#endif

//#if NETCORE20

                        if (Container.IsRegistered <LoggerConfiguration>())
                        {
                            Container.RegisterType <SerilogLoggerProvider>(new ContainerControlledLifetimeManager(), new InjectionFactory((c) =>
                            {
                                var seriologger = new SerilogLoggerProvider(c.Resolve <Serilog.Core.Logger>(), false);
                                return seriologger;
                            }));


                            builder.ConfigureLogging((hostingContext, logging) =>
                            {
                                // logging.AddProvider(Container.Resolve<SerilogLoggerProvider>());
                                logging.AddFilter("System", LogLevel.Warning);
                                logging.AddFilter("Microsoft", LogLevel.Warning);
                                logging.AddFilter("Microsoft.AspNetCore.Authentication", LogLevel.Information);
                            });
                        }
//#endif


                        ConfigureBuilder(builder);

                        return builder.UseUrls(url).Build();
                    }catch (Exception ex)
                    {
                        _logger.LogWarning(new EventId(), ex, "failed to build app pipeline");
                        throw;
                    }
                }), "kestrel")
            });
        }
示例#26
0
        public CalculatorAggregateTests(ITestOutputHelper output)
        {
            var cfg = new LoggerConfiguration().WriteTo.XunitTestOutput(output).CreateLogger();

            _log = new SerilogLoggerProvider(cfg);
        }
        /// <summary>
        /// This is the entry point of the service host process.
        /// </summary>
        private static void Main(string[] args)
        {
            var telemetryClient = new TelemetryClient(TelemetryConfiguration.CreateDefault()
                                                      .Tap(x =>
            {
                if (args.Length > 1)
                {
                    x.InstrumentationKey = args.Last();
                }
            }));

            Log.Logger = new LoggerConfiguration()
                         .WriteTo.ApplicationInsights(telemetryClient, TelemetryConverter.Traces, Serilog.Events.LogEventLevel.Debug)
                         //.WriteTo.AzureTableStorage(CloudStorageAccount.DevelopmentStorageAccount, Serilog.Events.LogEventLevel.Warning)
                         .WriteTo.ColoredConsole(Serilog.Events.LogEventLevel.Debug, outputTemplate:
                                                 "[{Timestamp:HH:mm:ss} {Level:u3}] {PartitionId} {Scope:lj} {Message:lj}{NewLine}{Exception}")
                         .MinimumLevel.Debug()
                         .Enrich.FromLogContext()
                         .CreateLogger();

            var logger = new SerilogLoggerProvider(Log.Logger, true)
                         .CreateLogger("Stateless-Sample");

            var storageAccount = CloudStorageAccount.DevelopmentStorageAccount;
            var table          = storageAccount.CreateCloudTableClient().GetTableReference("receiversample");

            table.CreateIfNotExistsAsync().GetAwaiter().GetResult();

            var settings = new ReceiverSettings()
            {
                EventHubConnectionString = args.First(),
                EventHubPath             = "sample",
                StorageConnectionString  = "UseDevelopmentStorage=true",
                ConsumerGroup            = "sf",
                LeaseContainerName       = "leases"
            };

            var options = new EventProcessorOptions
            {
                InitialOffsetProvider = partition =>
                {
                    logger.LogWarning("InitialOffsetProvider called for {partition}", partition);
                    return(EventPosition.FromStart());
                }
            };

            var pipeline = Composition.Combine(
                CMP.ServiceFabricReceiver.Common.Features.PartitionLogging(),
                CMP.ServiceFabricReceiver.Common.Features.OperationLogging(telemetryClient),
                CMP.ServiceFabricReceiver.Common.Features.Logging(),
                CMP.ServiceFabricReceiver.Common.Features.Retry(),
                CMP.ServiceFabricReceiver.Common.Features.Handling(x => EventHandler.Handle("Sample", table, x.Events)),
                CMP.ServiceFabricReceiver.Common.Features.Checkpointing()
                );

            var isInCluster = PlatformServices.Default.Application.ApplicationBasePath.Contains(".Code.");

            if (!isInCluster)
            {
                logger.LogInformation("Running in Process. Application insights key set : {instrumentationKeySet}", string.IsNullOrWhiteSpace(telemetryClient.InstrumentationKey));
                settings.ToHost()
                .RunAsync(logger, options, CancellationToken.None, (s, o) => { }, "none", partitionId => ctx => pipeline(ctx))
                .GetAwaiter()
                .GetResult();

                Thread.Sleep(Timeout.Infinite);
            }

            try
            {
                ServiceRuntime.RegisterServiceAsync(
                    "ReceiverServiceType2",
                    context =>
                    new SampleService(
                        context,
                        logger,
                        settings,
                        ServiceEventSource.Current.Message,
                        ct => Task.CompletedTask,
                        partitionId => ctx => pipeline(ctx),
                        options)
                    ).GetAwaiter().GetResult();

                ServiceEventSource.Current.ServiceTypeRegistered(Process.GetCurrentProcess().Id, $"{typeof(ReceiverService).Name}2");

                // Prevents this host process from terminating so services keep running.
                Thread.Sleep(Timeout.Infinite);
            }
            catch (Exception e)
            {
                ServiceEventSource.Current.ServiceHostInitializationFailed(e.ToString());
                throw;
            }
        }
示例#28
0
        public IServiceProvider CreateLoggerServices(ITestOutputHelper output, string className, LogLevel minLogLevel, [CallerMemberName] string testName = null)
        {
            // Try to shorten the class name using the assembly name
            if (className.StartsWith(_assemblyName + "."))
            {
                className = className.Substring(_assemblyName.Length + 1);
            }

            SerilogLoggerProvider serilogLoggerProvider = null;

            if (!string.IsNullOrEmpty(_baseDirectory))
            {
                var testOutputDirectory = Path.Combine(GetAssemblyBaseDirectory(_assemblyName, _baseDirectory), className);

                if (testOutputDirectory.Length + testName.Length + LogFileExtension.Length >= MaxPathLength)
                {
                    _globalLogger.LogWarning($"Test name {testName} is too long. Please shorten test name.");

                    // Shorten the test name by removing the middle portion of the testname
                    var testNameLength = MaxPathLength - testOutputDirectory.Length - LogFileExtension.Length;

                    if (testNameLength <= 0)
                    {
                        throw new InvalidOperationException("Output file path could not be constructed due to max path length restrictions. Please shorten test assembly, class or method names.");
                    }

                    testName = testName.Substring(0, testNameLength / 2) + testName.Substring(testName.Length - testNameLength / 2, testNameLength / 2);

                    _globalLogger.LogWarning($"To prevent long paths test name was shortened to {testName}.");
                }

                var testOutputFile = Path.Combine(testOutputDirectory, $"{testName}{LogFileExtension}");

                if (File.Exists(testOutputFile))
                {
                    _globalLogger.LogWarning($"Output log file {testOutputFile} already exists. Please try to keep log file names unique.");

                    for (var i = 0; i < 1000; i++)
                    {
                        testOutputFile = Path.Combine(testOutputDirectory, $"{testName}.{i}{LogFileExtension}");

                        if (!File.Exists(testOutputFile))
                        {
                            _globalLogger.LogWarning($"To resolve log file collision, the enumerated file {testOutputFile} will be used.");
                            break;
                        }
                    }
                }

                serilogLoggerProvider = ConfigureFileLogging(testOutputFile);
            }

            var serviceCollection = new ServiceCollection();

            serviceCollection.AddLogging(builder =>
            {
                builder.SetMinimumLevel(minLogLevel);

                if (output != null)
                {
                    builder.AddXunit(output, minLogLevel);
                }

                if (serilogLoggerProvider != null)
                {
                    // Use a factory so that the container will dispose it
                    builder.Services.AddSingleton <ILoggerProvider>(_ => serilogLoggerProvider);
                }
            });

            return(serviceCollection.BuildServiceProvider());
        }
示例#29
0
 /// <summary>
 /// Initializes a new instance of the <see cref="SerilogLoggerFactory"/> class.
 /// </summary>
 /// <param name="logger">The Serilog logger; if not supplied, the static <see cref="Log"/> will be used.</param>
 /// <param name="dispose">When true, dispose <paramref name="logger"/> when the framework disposes the provider. If the
 /// logger is not specified but <paramref name="dispose"/> is true, the <see cref="Log.CloseAndFlush()"/> method will be
 /// called on the static <see cref="Log"/> class instead.</param>
 internal SerilogLoggerFactory(ILogger logger = null, bool dispose = false)
 {
     _provider = new SerilogLoggerProvider(logger, dispose);
 }
 public LoggerFactory()
 {
     _loggerProvider = new SerilogLoggerProvider(new Serilog.LoggerConfiguration().CreateLogger());
 }
示例#31
0
        // This method gets called by the runtime. Use this method to add services to the container.
        // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
        public void ConfigureServices(IServiceCollection services)
        {
            // configure logging
            Log.Logger = new LoggerConfiguration()
                         .WriteTo.Sink(new HangfireConsoleSink())
                         //.WriteTo.Console()
                         .CreateLogger();

            var logger = new SerilogLoggerProvider(Log.Logger).CreateLogger(nameof(Program));

            services.AddSingleton(logger);

            services.AddControllers();

            var plugInsConfig = Configuration.GetSection("plugInsConfig").Get <PlugInsConfigBE>();

            // ==========================
            // load the hangfire config
            //  NOTE:  We are jsut using the In-Memory storage for the POC
            //          A real implementation would use a DB backed store
            // ==========================
            var hangfireConfig = Configuration.GetSection("hangfireConfig").Get <HangfireServiceConfigBE>();

            services.AddHangfire(config =>
                                 config.SetDataCompatibilityLevel(CompatibilityLevel.Version_170)
                                 .UseSimpleAssemblyNameTypeSerializer()
                                 .UseDefaultTypeSerializer()
                                 .UseMemoryStorage() // config param PollIntervalInSecs does not apply to InMemory Storage
                                 .UseConsole());

            services.AddHangfireServer(config =>
                                       config.WorkerCount = hangfireConfig.WorkerCount != -1 ? hangfireConfig.WorkerCount : Math.Min(Environment.ProcessorCount * 5, MAX_DEFAULT_WORKER_COUNT));

            // =========================
            // config swagger
            // =========================
            services.AddMvc(c =>
            {
                c.Conventions.Add(new ApiExplorerGroupPerVersionConvention()); // decorate Controllers to distinguish SwaggerDoc (v1, v2, etc.)
            });

            // all of the entities with sample requests are in the current assembly
            //services.AddSwaggerExamplesFromAssemblyOf<RaftFindAuthXctRequestBE>();
            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new OpenApiInfo
                {
                    Title       = "Scheduler Service POC WebAPI",
                    Version     = "v1",
                    Description = @"Documentation for Public WebAPI to administer Recurring Jobs is the Scheduler Service. 
### Technologies Leveraged:
* Hangfire as the scheduling engine.
* System.Composition to implement a Plug-In Model.
* Kafka to push tasks to subscribers.

### Important Endpoints:

| Endpoint | Desciption |
|----------|------------|
| `https://localhost:<port>/hangfire` | Hangfire Dashboard |
| `https://localhost:<port>/swagger` | Swagger website for recurring Job WebAPI   |

### Version History:

| Date| Version | Description |
|----------|----------|----------|
| 2020/04/14 | v1.0 | Initial Release |",
                    Contact     = new OpenApiContact
                    {
                        Name  = "US ESA Team",
                        Email = "*****@*****.**",
                        Url   = new Uri("https://www.fisglobal.com/"),
                    },
                    License = new OpenApiLicense
                    {
                        Name = "Property of FIS Global",
                        Url  = new Uri("https://www.fisglobal.com/"),
                    }
                });

                //c.ExampleFilters();
                c.EnableAnnotations();

                // Set the comments path for the Swagger JSON and UI for this assy
                var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
                var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
                c.IncludeXmlComments(xmlPath);

                // to avoid issue with BEs in two different namespaces that have the same class name
                c.CustomSchemaIds(i => i.FullName);
            });

            // ==========================
            // load the kafka config that is available to all plug-ins
            // ==========================
            var kafkaConfig = Configuration.GetSection("kafkaConfig").Get <KafkaServiceConfigBE>();

            services.AddSingleton(kafkaConfig);

            // ==========================
            // load the plug-in assys
            // ==========================
            var plugInsManager = new PlugInsManager(plugInsConfig, kafkaConfig);

            services.AddSingleton(plugInsManager);
        }