Skip to content

Commit

Permalink
feat: config logging (#9)
Browse files Browse the repository at this point in the history
* feat: config logging

* feat: add mongo sinks

* feat: recofig log level, push to mongodb
  • Loading branch information
danielNg91 committed Oct 21, 2023
1 parent 2186b3d commit 56471ef
Show file tree
Hide file tree
Showing 8 changed files with 66 additions and 47 deletions.
50 changes: 24 additions & 26 deletions Api/Configurations/AppConfigurationService.cs
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
using AutoWrapper;
using DomainLayer.Constants;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyModel;
using Microsoft.Extensions.Options;
using RepositoryLayer.Contexts;
using RepositoryLayer.Repositories;
using ServiceLayer.AppConfig;
using Serilog;
using Serilog.Events;
using Serilog.Settings.Configuration;
using ServiceLayer.Business;
using System.Text.Json.Serialization;
using System.Text.Json;
using WebApiLayer.Filters;
using ServiceLayer.Core.AppConfig;

namespace WebApiLayer.Configurations
{
Expand Down Expand Up @@ -51,6 +52,7 @@ public static void AddDbServices(this IServiceCollection services)
provider => provider.GetService<ApplicationDbContext>()
);
}

public static WebApplication UseAutoWrapper(this WebApplication app)
{
app.UseApiResponseAndExceptionWrapper(
Expand All @@ -63,31 +65,27 @@ public static WebApplication UseAutoWrapper(this WebApplication app)
);
return app;
}
public static void AddValidationServices(this IServiceCollection services)
{
services
.AddControllers(
options =>
{
options.SuppressAsyncSuffixInActionNames = false;
options.Filters.Add<ValidateModelStateFilter>();
}
)
.AddJsonOptions(
options =>
{
options.JsonSerializerOptions.DictionaryKeyPolicy = JsonNamingPolicy.CamelCase;
options.JsonSerializerOptions.ReferenceHandler = ReferenceHandler.IgnoreCycles;
}
);

public static WebApplicationBuilder UseSerilog(this WebApplicationBuilder builder, IConfiguration configuration) {
builder.Host.UseSerilog((cntxt, loggerConfiguration) =>
{
loggerConfiguration.ReadFrom.Configuration(configuration);
});
return builder;
}

public static async Task ApplyMigrations(this IServiceProvider serviceProvider)
public static WebApplication UseLoggingInterceptor(this WebApplication app)
{
using var scope = serviceProvider.CreateScope();
await using ApplicationDbContext dbContext =
scope.ServiceProvider.GetRequiredService<ApplicationDbContext>();
await dbContext.Database.MigrateAsync();
app.UseSerilogRequestLogging(options =>
{
options.GetLevel = (httpContext, elapsed, ex) => LogEventLevel.Information;
options.EnrichDiagnosticContext = (diagnosticContext, httpContext) =>
{
diagnosticContext.Set("RequestHost", httpContext.Request.Host.Value);
diagnosticContext.Set("RequestScheme", httpContext.Request.Scheme);
};
});
return app;
}
}
}
13 changes: 7 additions & 6 deletions Api/Program.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
using System.Reflection;
using Microsoft.AspNetCore.Mvc;
using ServiceLayer.AppConfig;
using Serilog;
using ServiceLayer.Core.AppConfig;
using WebApiLayer.Configurations;

var builder = WebApplication.CreateBuilder(args);
Expand All @@ -10,11 +10,12 @@
services.AddEndpointsApiExplorer();
services.AddSwaggerGen();

var configuration = builder.Configuration;
var configurationManager = builder.Configuration;
#region Add configurations to Services
{
services.Configure<AppSettings>(configuration.GetSection(nameof(AppSettings)));
services.AddValidationServices();
var configuration = configurationManager.GetSection(nameof(AppSettings));
services.Configure<AppSettings>(configuration);
builder.UseSerilog(configuration);
services.AddDbServices();
services.AddAppServices();
services.AddAutoMapper(Assembly.GetExecutingAssembly());
Expand All @@ -27,9 +28,9 @@
{
app.UseSwagger();
app.UseSwaggerUI();
await app.Services.ApplyMigrations();
}

app.UseLoggingInterceptor();
app.UseAutoWrapper();
app.UseHttpsRedirection();
app.UseAuthorization();
Expand Down
6 changes: 3 additions & 3 deletions Api/WebApiLayer.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,9 @@
</ItemGroup>

<ItemGroup>
<Reference Include="Domain">
<HintPath>..\Domain\bin\Debug\net6.0\Domain.dll</HintPath>
</Reference>
<Content Update="appsettings.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
</ItemGroup>

</Project>
25 changes: 21 additions & 4 deletions Api/appsettings.json
Original file line number Diff line number Diff line change
@@ -1,10 +1,27 @@
{
"AppSettings": {
"Logging": {
"LogLevel": {
"Serilog": {
"Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.File" ],
"MinimumLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
"Override": {
"Microsoft": "Warning",
"System": "Warning"
}
},
"WriteTo": [
{ "Name": "Console" },
{
"Name": "File",
"Args": {
"path": "/logs/log-.txt",
"rollingInterval": "Day",
"rollOnFileSizeLimit": true,
"formatter": "Serilog.Formatting.Compact.CompactJsonFormatter, Serilog.Formatting.Compact"
}
}
],
"Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ]
},
"ConnectionStrings": {
"DefaultConnection": "Server=(local);Database=GHub; User Id=sa;Password=123456;Trusted_Connection=True;MultipleActiveResultSets=true"
Expand Down
7 changes: 0 additions & 7 deletions Application/AppConfig/AppSettings.cs

This file was deleted.

6 changes: 6 additions & 0 deletions Application/Core/AppConfig/AppSettings.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
namespace ServiceLayer.Core.AppConfig;

public class AppSettings
{
public DbConfig ConnectionStrings { get; set; }
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
namespace ServiceLayer.AppConfig;
namespace ServiceLayer.Core.AppConfig;

public class DbConfig
{
Expand Down
4 changes: 4 additions & 0 deletions Application/ServiceLayer.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,13 @@
<ItemGroup>
<PackageReference Include="AutoMapper" Version="12.0.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.5" />
<PackageReference Include="Serilog.AspNetCore" Version="7.0.0" />
<PackageReference Include="Serilog.Sinks.File" Version="5.0.0" />
<PackageReference Include="Serilog.Sinks.MongoDB" Version="5.3.1" />
</ItemGroup>

<ItemGroup>
<Folder Include="Core\Logging\" />
<Folder Include="Exceptions\" />
<Folder Include="Extensions\" />
<Folder Include="Models\" />
Expand Down

0 comments on commit 56471ef

Please sign in to comment.