diff --git a/src/Services/ResultProcessing/ResultProcessing.API/Program.cs b/src/Services/ResultProcessing/ResultProcessing.API/Program.cs index 171e8e0e..a3d2c38a 100644 --- a/src/Services/ResultProcessing/ResultProcessing.API/Program.cs +++ b/src/Services/ResultProcessing/ResultProcessing.API/Program.cs @@ -10,6 +10,43 @@ namespace ResultProcessing.API { public class Program + Feature/Shahanaz/ResultProcessing/Initial-implemantion + { + public static readonly string Namespace = typeof(Program).Namespace!; + public static readonly string AppName = Namespace.Substring(Namespace.LastIndexOf('.', Namespace.LastIndexOf('.') - 1) + 1); + + [System.Diagnostics.CodeAnalysis.SuppressMessage( + "Design", + "CA1031:Do not catch general exception types", + Justification = "Top level all exception catcher")] + public static void Main(string[] args) + { + CreateHostBuilder(args).Build().Run(); + Activity.DefaultIdFormat = ActivityIdFormat.W3C; + + var configuration = GetConfiguration(); + + Log.Logger = CreateSerilogLogger(configuration); + try + { + Log.Information("Configuring web host ({ApplicationContext})...", AppName); + CreateHostBuilder(args).Build().Run(); + + return 0; + } + catch (Exception ex) + { + Log.Fatal(ex, "Host terminated unexpectedly"); + return 1; + } + finally + { + Log.CloseAndFlush(); + } + } + + public static IHostBuilder CreateHostBuilder(IConfiguration configuration,string[] args) => + { public static void Main(string[] args) { @@ -17,10 +54,40 @@ public static void Main(string[] args) } public static IHostBuilder CreateHostBuilder(string[] args) => + main Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup(); + Feature/Shahanaz/ResultProcessing/Initial-implemantion + webBuilder.UseConfiguration(configuration); + webBuilder.UseSerilog(); + }); + + private static ILogger CreateSerilogLogger(IConfiguration configuration) + { + return new LoggerConfiguration() + .MinimumLevel.Verbose() + .Enrich.WithProperty("ApplicationContext", AppName) + .Enrich.FromLogContext() + .Enrich.WithSpan() + .WriteTo.Console() + .WriteTo.Seq("http://seq") + .ReadFrom.Configuration(configuration) + .CreateLogger(); + } + + private static IConfiguration GetConfiguration() + { + var builder = new ConfigurationBuilder() + .SetBasePath(Directory.GetCurrentDirectory()) + .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) + .AddEnvironmentVariables(); + + return builder.Build(); + } + }); + main } } diff --git a/src/Services/ResultProcessing/ResultProcessing.API/ResultProcessing.API.csproj b/src/Services/ResultProcessing/ResultProcessing.API/ResultProcessing.API.csproj index 643a398a..a71ff86c 100644 --- a/src/Services/ResultProcessing/ResultProcessing.API/ResultProcessing.API.csproj +++ b/src/Services/ResultProcessing/ResultProcessing.API/ResultProcessing.API.csproj @@ -1,8 +1,23 @@ + Feature/Shahanaz/ResultProcessing/Initial-implemantion + + + net5.0 + + + + + + + + + + net5.0 - \ No newline at end of file + + main diff --git a/src/Services/ResultProcessing/ResultProcessing.API/Startup.cs b/src/Services/ResultProcessing/ResultProcessing.API/Startup.cs index 8cb2d22f..1d4991d8 100644 --- a/src/Services/ResultProcessing/ResultProcessing.API/Startup.cs +++ b/src/Services/ResultProcessing/ResultProcessing.API/Startup.cs @@ -28,6 +28,25 @@ public void ConfigureServices(IServiceCollection services) } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. + Feature/Shahanaz/ResultProcessing/Initial-implemantion + public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory) + { + var pathBase = Configuration["PATH_BASE"]; + if (!string.IsNullOrEmpty(pathBase)) + { + loggerFactory.CreateLogger().LogInformation("Using PATH BASE '{pathBase}'", pathBase); + app.UsePathBase(pathBase); + } + + if (env.IsDevelopment()) + { + app.UseDeveloperExceptionPage(); + + } + app.UseSerilogRequestLogging(); + app.UseSwagger(); + app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "ExamManagement.API v1")); + public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) @@ -45,6 +64,7 @@ public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { endpoints.MapControllers(); }); + main } } } diff --git a/src/Services/ResultProcessing/ResultProcessing.API/appsettings.json b/src/Services/ResultProcessing/ResultProcessing.API/appsettings.json index d9d9a9bf..5f1a684b 100644 --- a/src/Services/ResultProcessing/ResultProcessing.API/appsettings.json +++ b/src/Services/ResultProcessing/ResultProcessing.API/appsettings.json @@ -1,9 +1,20 @@ { + Feature/Shahanaz/ResultProcessing/Initial-implemantion + "Serilog": { + "MinimumLevel": { + "Default": "Information", + "Override": { + "Microsoft": "Warning", + "OpenCodeFoundation": "Information", + "System": "Warning" + } + "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" + main } }, "AllowedHosts": "*"