Skip to content
This repository has been archived by the owner on Apr 11, 2024. It is now read-only.

Commit

Permalink
feat(example-management): add seq and serilog (#491)
Browse files Browse the repository at this point in the history
Co-authored-by: Ratan Sunder Parai <ratanparai@gmail.com>
  • Loading branch information
cseshohag and ratanparai committed Aug 20, 2021
1 parent 847fd24 commit 0cd1536
Show file tree
Hide file tree
Showing 3 changed files with 69 additions and 5 deletions.
Expand Up @@ -5,6 +5,9 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Serilog" Version="2.10.0" />
<PackageReference Include="Serilog.Enrichers.Span" Version="1.3.0" />
<PackageReference Include="Serilog.Sinks.Console" Version="4.0.0" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.1.4" />
</ItemGroup>

Expand Down
58 changes: 56 additions & 2 deletions src/Services/ExamManagement/ExamManagement.API/Program.cs
@@ -1,20 +1,74 @@
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;
using Serilog;
using Serilog.Enrichers.Span;

namespace ExamManagement.API
{
public class Program
{
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(string[] args) =>
public static IHostBuilder CreateHostBuilder(IConfiguration configuration,string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
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();
}
}
}
13 changes: 10 additions & 3 deletions src/Services/ExamManagement/ExamManagement.API/Startup.cs
Expand Up @@ -4,6 +4,7 @@
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.OpenApi.Models;
using Serilog;

namespace ExamManagement.API
{
Expand All @@ -27,14 +28,20 @@ public void ConfigureServices(IServiceCollection services)
});
}

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory)
{
var pathBase = Configuration["PATH_BASE"];
if (!string.IsNullOrEmpty(pathBase))
{
loggerFactory.CreateLogger<Startup>().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"));

Expand Down

0 comments on commit 0cd1536

Please sign in to comment.