diff --git a/DocumentOperator.API/Program.cs b/DocumentOperator.API/Program.cs index 360703e..cd7b19c 100644 --- a/DocumentOperator.API/Program.cs +++ b/DocumentOperator.API/Program.cs @@ -1,4 +1,7 @@ using Serilog; +using Serilog.Ui.Core.Extensions; +using Serilog.Ui.SqliteDataProvider.Extensions; +using Serilog.Ui.Web.Extensions; using DocumentOperator.Infrastructure.Configuration; using DocumentOperator.Application; using DocumentOperator.Infrastructure; @@ -45,7 +48,23 @@ try builder.Services.AddSwaggerDocumentation(); // ======================================== - // 4. Build App + // 4. Serilog.UI Configuration + // ======================================== + var logDirectory = builder.Configuration.GetValue("Application:LogDirectory") + ?? throw new InvalidOperationException("Application:LogDirectory not found in configuration."); + var sqliteDbPath = Path.Combine(logDirectory, "logs.db"); + + builder.Services.AddSerilogUi(logUIOpt => + { + logUIOpt.UseSqliteServer(dbOpt => + { + dbOpt.WithConnectionString($"Data Source={sqliteDbPath}"); + dbOpt.WithTable("Logs"); + }); + }); + + // ======================================== + // 5. Build App // ======================================== var app = builder.Build(); @@ -67,7 +86,12 @@ try app.UseHttpsRedirection(); // ======================================== - // 6. Endpoints (Controller-based API) + // 6. Serilog.UI Dashboard + // ======================================== + app.UseSerilogUi(); // Accessible at /serilog-ui + + // ======================================== + // 7. Endpoints (Controller-based API) // ======================================== app.MapControllers(); // Maps all [ApiController] controllers diff --git a/DocumentOperator.API/appsettings.json b/DocumentOperator.API/appsettings.json index 2ab9320..d944c0b 100644 --- a/DocumentOperator.API/appsettings.json +++ b/DocumentOperator.API/appsettings.json @@ -7,6 +7,10 @@ }, "AllowedHosts": "*", + "Application": { + "LogDirectory": "E:\\LogFiles\\Digital Data\\DocumentOperator.API" + }, + "Serilog": { "MinimumLevel": { "Default": "Information", @@ -30,6 +34,14 @@ "rollingInterval": "Day", "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] {Message:lj} {Properties:j}{NewLine}{Exception}" } + }, + { + "Name": "SQLite", + "Args": { + "sqliteDbPath": "E:\\LogFiles\\Digital Data\\DocumentOperator.API\\logs.db", + "tableName": "Logs", + "storeTimestampInUtc": true + } } ], "Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ]