From 34addd930fbf8be62720e5af820a5cc65f770b18 Mon Sep 17 00:00:00 2001 From: Polianin Nikita Date: Sat, 1 Jun 2024 10:50:38 +0300 Subject: [PATCH] feat: add serilog for logging --- .../AppConfig/LoggerConfiguration.cs | 79 +++++++++++++++++++ Endpoint/Endpoint.csproj | 4 + 2 files changed, 83 insertions(+) create mode 100644 Endpoint/Configuration/AppConfig/LoggerConfiguration.cs diff --git a/Endpoint/Configuration/AppConfig/LoggerConfiguration.cs b/Endpoint/Configuration/AppConfig/LoggerConfiguration.cs new file mode 100644 index 0000000..d10e5a4 --- /dev/null +++ b/Endpoint/Configuration/AppConfig/LoggerConfiguration.cs @@ -0,0 +1,79 @@ +using Microsoft.AspNetCore.Builder; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Hosting; +using Mirea.Api.Endpoint.Common.Services; +using Mirea.Api.Endpoint.Configuration.General; +using Serilog; +using Serilog.Events; +using Serilog.Filters; +using Serilog.Formatting.Compact; +using System.IO; + +namespace Mirea.Api.Endpoint.Configuration.AppConfig; + +public static class LoggerConfiguration +{ + public static IHostBuilder AddCustomSerilog(this IHostBuilder hostBuilder) + { + hostBuilder.UseSerilog((context, _, configuration) => + { + var generalConfig = context.Configuration.Get(); + configuration + .MinimumLevel.Debug() + .MinimumLevel.Override("Microsoft", LogEventLevel.Information) + .Enrich.FromLogContext() + .WriteTo.Console( + outputTemplate: + "[{Level:u3}] [{Timestamp:dd.MM.yyyy HH:mm:ss}] {Message:lj}{NewLine}{Exception}"); + + if (generalConfig?.LogSettings?.EnableLogToFile == true) + { + if (!string.IsNullOrEmpty(generalConfig.LogSettings.LogFilePath) && Directory.Exists(PathBuilder.Combine(generalConfig.LogSettings.LogFilePath))) + Directory.CreateDirectory(generalConfig.LogSettings.LogFilePath); + + configuration.WriteTo.File( + new CompactJsonFormatter(), + PathBuilder.Combine( + generalConfig.LogSettings.LogFilePath!, + generalConfig.LogSettings.LogFileName + ".json" + ), + LogEventLevel.Debug, + rollingInterval: RollingInterval.Day); + } + + configuration + .MinimumLevel.Override("Microsoft.AspNetCore.Hosting", LogEventLevel.Warning) + .MinimumLevel.Override("Microsoft.AspNetCore.Mvc", LogEventLevel.Warning) + .MinimumLevel.Override("Microsoft.AspNetCore.Routing", LogEventLevel.Warning); + + configuration.Filter.ByExcluding(Matching.WithProperty("SourceContext", sc => + sc.Contains("Microsoft.EntityFrameworkCore.Database.Command"))); + }); + + return hostBuilder; + } + + public static IApplicationBuilder UseCustomSerilog(this IApplicationBuilder app) + { + app.UseSerilogRequestLogging(options => + { + options.MessageTemplate = "Handled {RequestPath} in {Elapsed:0.0000} ms"; + + options.GetLevel = (_, elapsed, ex) => elapsed >= 2500 || ex != null + ? LogEventLevel.Warning + : elapsed >= 1000 + ? LogEventLevel.Information + : LogEventLevel.Debug; + + options.EnrichDiagnosticContext = (diagnosticContext, httpContext) => + { + diagnosticContext.Set("RequestHost", httpContext.Request.Host.Value); + diagnosticContext.Set("RequestScheme", httpContext.Request.Scheme); + diagnosticContext.Set("UserAgent", httpContext.Request.Headers.UserAgent); + diagnosticContext.Set("RemoteIPAddress", httpContext.Connection.RemoteIpAddress?.ToString()); + }; + }); + + return app; + } +} diff --git a/Endpoint/Endpoint.csproj b/Endpoint/Endpoint.csproj index bd7ee16..26fc0a3 100644 --- a/Endpoint/Endpoint.csproj +++ b/Endpoint/Endpoint.csproj @@ -25,6 +25,10 @@ + + + +