Added logging, added Elmah error logging

This commit is contained in:
2025-09-27 13:51:30 +02:00
parent cea3e571f1
commit fad7f8454f
5 changed files with 51 additions and 35 deletions

2
.gitignore vendored
View File

@@ -1,2 +1,4 @@
bin/* bin/*
obj/* obj/*
logs/*
Elmah/*

View File

@@ -5,7 +5,10 @@
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="ElmahCore" Version="2.1.2" />
<PackageReference Include="Novell.Directory.Ldap" Version="2.2.1" /> <PackageReference Include="Novell.Directory.Ldap" Version="2.2.1" />
<PackageReference Include="Serilog" Version="4.3.0" />
<PackageReference Include="Serilog.AspNetCore" Version="9.0.0" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="9.0.4" /> <PackageReference Include="Swashbuckle.AspNetCore" Version="9.0.4" />
<PackageReference Include="Swashbuckle.AspNetCore.SwaggerGen" Version="9.0.4" /> <PackageReference Include="Swashbuckle.AspNetCore.SwaggerGen" Version="9.0.4" />
<PackageReference Include="Swashbuckle.AspNetCore.SwaggerUI" Version="9.0.4" /> <PackageReference Include="Swashbuckle.AspNetCore.SwaggerUI" Version="9.0.4" />

View File

@@ -1,42 +1,13 @@
// var builder = WebApplication.CreateBuilder(args); using ElmahCore;
using ElmahCore.Mvc;
// // Add services to the container. using Serilog;
// 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 Berufsschule_HAM.Services; using Berufsschule_HAM.Services;
var builder = WebApplication.CreateBuilder(args); var builder = WebApplication.CreateBuilder(args);
// Bind options // Bind options
builder.Services.Configure<LdapOptions>(builder.Configuration.GetSection("Ldap")); builder.Services.Configure<LdapOptions>(builder.Configuration.GetSection("Ldap"));
// Register LDAP service as singleton (it manages its own connection) // Register LDAP service as singleton (it manages its own connection)
builder.Services.AddSingleton<LdapService>();
builder.Services.AddControllersWithViews(); builder.Services.AddControllersWithViews();
@@ -44,6 +15,18 @@ builder.Services.AddControllersWithViews();
builder.Services.AddEndpointsApiExplorer(); builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen(); builder.Services.AddSwaggerGen();
Log.Logger = new LoggerConfiguration()
.ReadFrom.Configuration(builder.Configuration)
.CreateLogger();
builder.Services.AddSerilog();
builder.Services.AddElmah<XmlFileErrorLog>(Options =>
{
Options.LogPath = builder.Configuration.GetValue<string>("Elmah:LogFolder") ?? "~/logs";
});
builder.Services.AddSingleton<LdapService>();
var app = builder.Build(); var app = builder.Build();
if (!app.Environment.IsDevelopment()) if (!app.Environment.IsDevelopment())
@@ -51,7 +34,7 @@ if (!app.Environment.IsDevelopment())
app.UseExceptionHandler("/Home/Error"); app.UseExceptionHandler("/Home/Error");
} }
//app.MapSwagger(); app.UseElmah();
app.UseSwagger(); app.UseSwagger();
app.UseSwaggerUI(); app.UseSwaggerUI();

View File

@@ -12,11 +12,13 @@ public class LdapService : IDisposable
{ {
private readonly LdapOptions _opts; private readonly LdapOptions _opts;
private readonly LdapConnection _conn; private readonly LdapConnection _conn;
private ILogger _logger;
public LdapService(IOptions<LdapOptions> options) public LdapService(IOptions<LdapOptions> options, ILogger<LdapService> logger)
{ {
_opts = options.Value; _opts = options.Value;
_conn = new LdapConnection { SecureSocketLayer = _opts.UseSsl }; _conn = new LdapConnection { SecureSocketLayer = _opts.UseSsl };
_logger = logger;
ConnectAndBind(); ConnectAndBind();
} }
@@ -26,7 +28,15 @@ public class LdapService : IDisposable
{ {
Console.WriteLine(_opts.Host); Console.WriteLine(_opts.Host);
Console.WriteLine(_opts.Port); 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); _conn.Bind(_opts.BindDn, _opts.BindPassword);
} }

View File

@@ -5,6 +5,24 @@
"Microsoft.AspNetCore": "Warning" "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": "*", "AllowedHosts": "*",
"Ldap": { "Ldap": {
"Host": "ld50.dev", "Host": "ld50.dev",