diff --git a/.gitignore b/.gitignore index 49bc29c..f96e9df 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ bin/* obj/* +logs/* +Elmah/* diff --git a/Berufsschule_HAM.csproj b/Berufsschule_HAM.csproj index e009cd5..0318cad 100644 --- a/Berufsschule_HAM.csproj +++ b/Berufsschule_HAM.csproj @@ -5,7 +5,10 @@ enable + + + diff --git a/Program.cs b/Program.cs index 74fa2ab..48b9929 100644 --- a/Program.cs +++ b/Program.cs @@ -1,42 +1,13 @@ -// var builder = WebApplication.CreateBuilder(args); - -// // Add services to the container. -// builder.Services.AddControllersWithViews(); - -// var app = builder.Build(); - -// // Configure the HTTP request pipeline. -// if (!app.Environment.IsDevelopment()) -// { -// app.UseExceptionHandler("/Home/Error"); -// // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. -// app.UseHsts(); -// } - -// app.UseHttpsRedirection(); -// app.UseRouting(); - -// app.UseAuthorization(); - -// app.MapStaticAssets(); - -// app.MapControllerRoute( -// name: "default", -// pattern: "{controller=Home}/{action=Index}/{id?}") -// .WithStaticAssets(); - - -// app.Run(); - +using ElmahCore; +using ElmahCore.Mvc; +using Serilog; using Berufsschule_HAM.Services; - var builder = WebApplication.CreateBuilder(args); // Bind options builder.Services.Configure(builder.Configuration.GetSection("Ldap")); // Register LDAP service as singleton (it manages its own connection) -builder.Services.AddSingleton(); builder.Services.AddControllersWithViews(); @@ -44,6 +15,18 @@ builder.Services.AddControllersWithViews(); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); +Log.Logger = new LoggerConfiguration() + .ReadFrom.Configuration(builder.Configuration) + .CreateLogger(); +builder.Services.AddSerilog(); + +builder.Services.AddElmah(Options => +{ + Options.LogPath = builder.Configuration.GetValue("Elmah:LogFolder") ?? "~/logs"; +}); + +builder.Services.AddSingleton(); + var app = builder.Build(); if (!app.Environment.IsDevelopment()) @@ -51,7 +34,7 @@ if (!app.Environment.IsDevelopment()) app.UseExceptionHandler("/Home/Error"); } -//app.MapSwagger(); +app.UseElmah(); app.UseSwagger(); app.UseSwaggerUI(); diff --git a/Services/LdapService.cs b/Services/LdapService.cs index 95ed308..16f3ef0 100644 --- a/Services/LdapService.cs +++ b/Services/LdapService.cs @@ -12,11 +12,13 @@ public class LdapService : IDisposable { private readonly LdapOptions _opts; private readonly LdapConnection _conn; + private ILogger _logger; - public LdapService(IOptions options) + public LdapService(IOptions options, ILogger logger) { _opts = options.Value; _conn = new LdapConnection { SecureSocketLayer = _opts.UseSsl }; + _logger = logger; ConnectAndBind(); } @@ -26,7 +28,15 @@ public class LdapService : IDisposable { Console.WriteLine(_opts.Host); Console.WriteLine(_opts.Port); - _conn.Connect(_opts.Host, _opts.Port); + try + { + _conn.Connect(_opts.Host, _opts.Port); + } + catch (SystemException ex) + { + _logger.LogCritical("Unable to connect to LDAP: {ex.Message}\n{ex.StackTrace}", [ex.Message, ex.StackTrace]); + throw; + } } _conn.Bind(_opts.BindDn, _opts.BindPassword); } diff --git a/appsettings.json b/appsettings.json index 79455a2..f003816 100644 --- a/appsettings.json +++ b/appsettings.json @@ -5,6 +5,24 @@ "Microsoft.AspNetCore": "Warning" } }, + "Serilog": { + "Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.File" ], + "MinimumLevel": "Information", + "WriteTo": [ + { "Name": "Console" }, + { "Name": "File", "Args": { "path": "logs/log.txt", "rollingInterval": "Day", "retainedFileCountLimit": 7 } } + ], + "Properties": { + "Application": "Embeddingsearch.Indexer" + } + }, + "Elmah": { + "AllowedHosts": [ + "127.0.0.1", + "::1" + ], + "LogFolder": "./Elmah" + }, "AllowedHosts": "*", "Ldap": { "Host": "ld50.dev",