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",