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() ); }
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 ); }
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); }
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; } }
// 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(); }
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); } }
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); }
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)); }
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; } }
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() }; }
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); }
// 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); }
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") }); }
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; } }
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()); }
/// <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()); }
// 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); }