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

Commit de781b5

Browse files
Nitai Chandra Banikratanparai
andauthored
feat(certificate-processing): add seq and serilog (#497)
Co-authored-by: Ratan Sunder Parai <ratanparai@gmail.com>
1 parent 7951fc2 commit de781b5

3 files changed

Lines changed: 70 additions & 5 deletions

File tree

src/Services/CertificateProcessing/CertificateProcessing.API/CertificateProcessing.API.csproj

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33
<TargetFramework>net5.0</TargetFramework>
44
</PropertyGroup>
55
<ItemGroup>
6-
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.1.4"/>
6+
<PackageReference Include="Serilog" Version="2.10.0" />
7+
<PackageReference Include="Serilog.Enrichers.Span" Version="1.3.0" />
8+
<PackageReference Include="Serilog.Sinks.Console" Version="4.0.0" />
9+
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.1.4" />
710
</ItemGroup>
811
</Project>
Lines changed: 56 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,73 @@
11
using Microsoft.AspNetCore.Hosting;
22
using Microsoft.Extensions.Hosting;
3+
using Serilog;
4+
using Serilog.Enrichers.Span;
35

46
namespace CertificateProcessing.API
57
{
68
public class Program
79
{
8-
public static void Main(string[] args)
10+
public static readonly string Namespace = typeof(Program).Namespace!;
11+
public static readonly string AppName = Namespace.Substring(Namespace.LastIndexOf('.', Namespace.LastIndexOf('.') - 1) + 1);
12+
13+
public static int Main(string[] args)
914
{
10-
CreateHostBuilder(args).Build().Run();
15+
Activity.DefaultIdFormat = ActivityIdFormat.W3C;
16+
17+
var configuration = GetConfiguration();
18+
Log.Logger = CreateSerilogLogger(configuration);
19+
20+
try
21+
{
22+
Log.Information("Configuring web host ({ApplicationContext})...", AppName);
23+
var host = CreateHostBuilder(configuration, args).Build();
24+
25+
Log.Information("Starting web host ({ApplicationContext})...", AppName);
26+
host.Run();
27+
28+
return 0;
29+
}
30+
catch (Exception ex)
31+
{
32+
Log.Fatal(ex, "Host terminated unexpectedly");
33+
return 1;
34+
}
35+
finally
36+
{
37+
Log.CloseAndFlush();
38+
}
1139
}
1240

13-
public static IHostBuilder CreateHostBuilder(string[] args) =>
41+
public static IHostBuilder CreateHostBuilder(IConfiguration configuration, string[] args) =>
1442
Host.CreateDefaultBuilder(args)
1543
.ConfigureWebHostDefaults(webBuilder =>
1644
{
1745
webBuilder.UseStartup<Startup>();
46+
webBuilder.UseConfiguration(configuration);
47+
webBuilder.UseSerilog();
1848
});
49+
50+
private static ILogger CreateSerilogLogger(IConfiguration configuration)
51+
{
52+
return new LoggerConfiguration()
53+
.MinimumLevel.Verbose()
54+
.Enrich.WithProperty("ApplicationContext", AppName)
55+
.Enrich.FromLogContext()
56+
.Enrich.WithSpan()
57+
.WriteTo.Console()
58+
.WriteTo.Seq("http://seq")
59+
.ReadFrom.Configuration(configuration)
60+
.CreateLogger();
61+
}
62+
63+
private static IConfiguration GetConfiguration()
64+
{
65+
var builder = new ConfigurationBuilder()
66+
.SetBasePath(Directory.GetCurrentDirectory())
67+
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
68+
.AddEnvironmentVariables();
69+
70+
return builder.Build();
71+
}
1972
}
2073
}

src/Services/CertificateProcessing/CertificateProcessing.API/Startup.cs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using Microsoft.Extensions.DependencyInjection;
55
using Microsoft.Extensions.Hosting;
66
using Microsoft.OpenApi.Models;
7+
using Serilog;
78

89
namespace CertificateProcessing.API
910
{
@@ -33,13 +34,21 @@ public void ConfigureServices(IServiceCollection services)
3334
}
3435

3536
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
36-
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
37+
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory)
3738
{
39+
var pathBase = Configuration["PATH_BASE"];
40+
if (!string.IsNullOrEmpty(pathBase))
41+
{
42+
loggerFactory.CreateLogger<Startup>().LogInformation("Using PATH BASE '{pathBase}'", pathBase);
43+
app.UsePathBase(pathBase);
44+
}
45+
3846
if (env.IsDevelopment())
3947
{
4048
app.UseDeveloperExceptionPage();
4149
}
4250

51+
app.UseSerilogRequestLogging();
4352
app.UseSwagger();
4453
app.UseSwaggerUI(
4554
c => c.SwaggerEndpoint(

0 commit comments

Comments
 (0)